用UML建模开发嵌入式软件

发布者:devilcore最新更新时间:2007-08-20 来源: 单片机及嵌入式系统应用关键字:控制  扬声  动态  编码 手机看文章 扫描二维码
随时随地手机看文章

引 言

面向对象开发方法无疑是当前最流行的软件开发方法。这归功于面向对象开发的众多优点:可靠性高,所开发的程序更健壮;由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间;继承和封装使得应用程序的修改带来的影响更加局部化,应用程序更易于维护、更新和升级。另外,UML建模语言和Rosc等CASE工具为面向对象的流行也起了很太作用,这些工具允许应用规范的面向对象分析和设计的方法与理论,远离纠缠不清的源代码,使得构建和设计变得更直观、更容易理解与修改,从而大大提高开发效率。

嵌入式系统的应用越来越广泛,嵌入式计算机在数量上远远超过了各种通用计算机。嵌入式软件的开发与PC软件的开发相比存在一些特别的地方;①嵌入式软件代码往往要求高质量、高可靠性;②嵌入式软件要求尽可能短的二进制代码长度和数据长度,尽管半导体技术的发展使处理器速度不断提高、片上存储器容量不断增加,但在大多数应用中,存储空间仍然是宝贵的;③嵌入式系统往往存在实时性的要求。这些特别要求使得面向对象开发不太适合嵌入式系统。汇编语言是一种非结构化的语言,对于大型的结构化程序设计已经完全不能胜任了,而C语言相比其他高级语言具有明显的性能优势,这些原因使得C语言成为嵌入式系统开发的最佳选择。

随着后PC时代的到来,嵌入式应用迅速增长,应用的复杂性也急剧增加,C语言对应的传统结构化设计方法已不能满足嵌入式软件设计和开发的需要。能不能把面向对象开发与C语言的优点结合起来?对这个问题,已经有人提出过一些方法,主要集中在用C语言来实现C++的语法,如用结构来模拟类,用函数指针来表示成员函数。这些方法使得本来语法就已经很复杂的C语言更加麻烦,同时没有了C语言快速、高效的优点。这里提出一种新的方法:用面向对象方法进行分析和设计,最后直接用C语言进行编码。

1 应用实例

绕线机控制系统是一个控制两个电机的单片机控制系统,我们使用本文提出的新开发方法进行这个系统的开发。系统采用瑞萨公司H8/300H系列的16位单片机H8/3062,整个系统硬件结构如图l所示。单片机通过I/O口与Flash芯片、控制面板、扬声器以及电机驱动电路相连,并通过光电编码盘检测直流电机转动的圈数。

作为面向对象建模的工业标准,UML几乎被所有面向对象的软件项目所使用。这个项目也使用UML来建模,用到的CASE工具是Rose。UML提供了5类图进行不同阶段的建模:用例图、静态图、行为图、交互图、实现图。在开发过程中,可根据不同阶段的具体要求,选择不同的图形来描述系统的静态结构模型或者动态行为模型。一般过程是:①用UML的用例模型确定目标系统的主要功能和行为,以便准确、完整地识别系统的需求;②通过对用例模型的分析,从用例的描述中识别反映问题域本质的类和对象,并利用UML的类图以及类之间的关系揭示系统的结构和组成;③利用UML动态模型中的顺序图、协作图、状态图和活动图描述系统结构元素的动态特性和行为。

1.1 需求过程


系统主要运行过程:①开机时,步进电机自动对原点;②修改参数设置时,单片机把修改值存入Flash;③启动键按下时,直流电机开始转动绕线,单片机通过光电编码盘检测转动圈数,并控制步进电机按照设置的参数排线,绕线完成后自动停止;④暂停键按下时,直流电机停止绕线,步进电机排完已转的舀数后停止;⑤复归键按下时,系统重启。

系统的参与者只有用户1个,通过对系统需求的分析,可以识别3个主要用例:开机、机器设置和绕线控制。通过对用例的进一步分解,得出系统的用例图,如图2所示。

1.2 设计过程

完成需求分析之后,进入设计阶段。这个阶段中,以需求分析结果为基础,找出系统所需要的类和对象以及其相互关系。针对嵌入式系统的特点,面向对象的一些高级特性不能使用,动态创建对象、派生和多态这样的特性会大大降低系统速度并增大代码空间和数据空间,对瑞萨H8/3062,这款单片机只有128KB的ROM和4KB的RAM,节省每一个字节都显得非常重要。

通过对用例和系统结构分析,识别出来的类和关系如图3所示。

出于可移植性的考虑,所有类被分成3个层次:

最顶层是功能逻辑类的抽象,MachineStting为机器设置类;Keys为按键类,Displayr为显示类,MotorController为电机控制器类。这些逻辑上的类与硬件无关,便于以后硬件修改,同时使得开发绕线机的不同版本变得非常容易,如从平绕机到开发环行机,从二轴绕线机到开发三轴绕线机。

中间层是外围硬件类的抽象,Flash为Flash存储类,用于存储设置的参数;Speaker为扬声器类;Panel为面板类;DCMoto/为直流电机类;StepMotor为步进电机类。

最底层是单片机及其内部功能模块类的抽象,H8/3062为单片机类,用于封装输入/输出口;Timer_KeyShake为按键防抖定时器;Timer_DCMotor为直流电机PWM脉冲产生定时器;Timer_DCCapture为直流电机圈数捕获定时器;Timer_StepMotor为步进电机PWM脉冲产生定时器。分这一层可以使得变换单片机类型非常容易,瑞萨H8/300H系列单片机在国内应用非常罕见,之所以选用这款是为了与国外产品的竞争,这样可以更快、更好地打开国际销路,但在选择这款单片机的同时已经做好了移植到ARM内核单片机的准备。

为了理解系统的动态行为,还应该用顺序图、协作图、状态图和活动图对系统动态行为进行描述。状态图对嵌入式系统的设计尤其重要,这里用其对MotorController的状态转换进行描述,如图4所示。

可以用时序图等对用例进行进一步的分析,“启动”按键按下后处理的时序图如图5所示。

建模过程不是一个直线过程。它往往是一个演化、迭代的过程,不断地分析、评价、修改、再分析,才可能得到一个高质量的模型,为高质量的软件打下基础。

1.3 编码过程


Rose具有自动生成C++框架代码的功能。在Rose菜单中选择Tools→ANSI C++→Generate Code,可以生成C++的框架代码。

要用C编码,需要把C++代码稍作修改变成C代码。由于没有动态创建实体,所有的对象都是静态的。这使得修改工作极其简单——把“::”改成“_”即可。修改后的“_”前面的部分可以看成是对象名,后面的部分看成是成员函数名,源文件的修改如图6所示。

头文件也需要做相应的修改,对变量的定义需要放到源文件里面,如图7所示。

代码修改完成后,剩下的就是C语言的编码过程了。编码时,当调用对象成员时,“.”操作符用“_”代替,则刚好对应上修改后的变量和函数。

2 进一步优化程序的方法

为了进一步提高程序的速度,还应对程序进行专门的优化,例如中断处理程序里面一两条指令引起的差异就非常明显。下面介绍几种优化办法。

①把成员函数定义成宏函数。由于面向对象数据隐藏的特点,对数据的操作需要以函数的形式提供,使得数据的操作效率变低。C++编程时,类的成员函数不能修改成宏,改为C函数后,就可以修改了;但这种优化最好在调试结束后进行,因为宏函数不方便错误定位。修改方法如图8所示。
②把成员函数定义成内联函数,如图9所示。

③程序中使用查表。对一些很消耗时间资源的非常复杂的运算,可以使用查表的方式。在步进电机的加减速控制中,加减速曲线一般采用指数曲线或者S曲线,运算量较大。可以事先把曲线对应的定时器上界寄存器的值离线计算出来,并片j数组保存起来,需要时直接读数组即可。这种方法通过牺牲空问来换取时间,但是牺牲的是相对宽余的ROM空间,还是比较划算的。

结语

绕线机项目获得了很好的效果,达到了系统的性能要求。测试时,发现的错误相比以前类似项目大大减少。更让人兴奋的是,测试中没有发现任何大的软件结构上的错误。这归功于Rose的前期可视化建模功能。编码之前可以很清楚地掌握系统的结构,这是面向对象设计相比传统方法的优势。

应用结果表明,这种开发方法是很实用的,可以优化程序结构、缩短开发周期,实现快速开发又不降低程序的效率;但这种方法的应用是有局限性的,对效率与空间要求不高的嵌入式系统,完全可以直接用C++编程,因此这种方法只适合于空间紧张、实时性要求比较高的系统。

关键字:控制  扬声  动态  编码 引用地址:用UML建模开发嵌入式软件

上一篇:多核与多执行绪的嵌入式系统解决方案
下一篇:采用分而治之的方法设计嵌入式系统

推荐阅读最新更新时间:2024-05-13 18:37

DS1307与兼容8051的微控制器接口
本应用笔记提供了如何将DS1307实时时钟(RTC)连接至微控制器的信息,并提供了一些访问该器件的示例代码。 介绍 DS1307串行实时时钟集成了2线串行接口,可使用兼容8051的微控制器进行控制。本例中的DS1307直接连接到DS5000微控制器上的两个I/O端口,2线握手由低电平驱动器处理,本应用笔记对此进行了讨论。 DS1307 说明 DS1307串行实时时钟为低功耗、全BCD时钟/日历外加56字节非易失性SRAM。地址和数据通过2线双向总线串行传输。时钟/日历提供秒、分钟、小时、星期、日期、月份和年份信息。对于少于 31 天的月份,月末日期会自动调整,包括对闰年的更正。时钟以 24 小时制或 12 小时制运行,带
[单片机]
DS1307与兼容8051的微<font color='red'>控制</font>器接口
无刷直流电机控制器MC33035的原理及应用
摘要:MC33035是美国安森美公司开发的高性能第二代单元无刷直流电机控制器,它包含开环三相或四相电机控制所需的全部有效功能。该器件由具有良好整流序列的转子位置译码器、可提供传感器功率的温度补偿参考、频率可编程的锯齿波振荡器、完全可访问的误差放大器以及三个非常适用于驱动大功率MOSFET的大电流推挽底部驱动器组成,因而是一种功能齐全的电机控制器。文中介绍了MC33035的特点功能和工作原理,给出了由它组成的三相六步全波电机控制和H型电机有刷控制等两种电机控制电路。 关键词:无刷 直流电机 控制 MC33035 1 概述 MC33035无刷直流电机控制器采用双极性模拟工艺制造, 可在任何恶劣的工业环境条件下保证高品质和高稳
[工业控制]
用PIC16F73单片机产生SPWM波控制UPS电源逆变系统解析方案
1 引言 随着信息技术的不断发展和计算机应用的日益普及,高新技术设备对供电质量的要求越来越高,很多设备都要求电源能够持续提供恒频恒压、无崎变的纯正弦波交流电,不间断电源UPS就是用来给这些设备供电的。UPS一般采用正弦脉宽调制(SPWM)的控制方法将直流电逆变成正弦波交流电。目前,SPWM控制波形的产生一般有三种方式:1、用分立元件电路产生,主要由三角波发生器、正弦波发生器和比较器组成。分立元件电路复杂,调试困难,成本高,可靠性差,因此一般很少采用。2、用专用集成芯片产生,专用集成芯片功能强大,输出波形质量高,应用比较广泛。3、用单片机实现,现在许多单片机都具有产生SPWM波的功能,采用单片机可使电路简单可靠,而且还方便对系统其
[单片机]
用PIC16F73单片机产生SPWM波<font color='red'>控制</font>UPS电源逆变系统解析方案
小米12爆料:对称式双扬声器的回归
今天,博主@数码闲聊站爆料,小米12将会采用对称式立体声双扬声器。   众所周知,上一代小米11虽然也采用了双扬声器的设计,但是该机的扬声器为非对称式设计,如今小米12弥补了上一代的遗憾。   此前在小米10系列上,小米为其配备了双1216对称式扬声器,它通过在顶部、底部分布扬声器的方式,重建声音的立体感。   虽然目前已有一些手机宣称采用了“立体声”设计,但大部分产品很难拿出更多空间实现“真立体声设计”。比如常见的顶部听筒出声方案,无法做到左右听感一致,只能通过后处理的方式对精确定位进行补偿。   而小米10系列对称式双扬声器的设计最大程度上还原声音的立体感,一些大型手游,尤其是FPS类的大型手游中,对声场的感知尤其重要。
[手机便携]
电压波动和闪变的检测与控制方法
由冲击性功率负荷引起的电压波动与闪变是电能质量问题的重要方面之一。本文论述了电压波动和闪变的常用检测方法,比较分析了几种改善电压波动和闪变补偿装置的性能特点,为电力系统电压波动与闪变的监测及抑制提供参考。 关键词:电压波动;闪变;检测;抑制;电能质量 Detection and Suppression Methods for Voltage Fluctuation and Flicker GUO Shang-hua, HUANG Chun,WANG Lei,CAO Guo-jian (College of Electricity & Information Engineering of Hunan University
[工业控制]
电压波动和闪变的检测与<font color='red'>控制</font>方法
基于DDR3存储器接口控制器IP核的视频数据处理
   引言     与过去几代(DDR和DDR2)器件相比,DDR3存储器器件有了明显的进步。DDR3存储器系统可以大大提升各种数据处理应用的性能。为了充分利用和发挥DDR3存储器的优点,使用一个高效且易于使用的DDR3存储器接口控制器是非常重要的。视屏处理应用就是一个很好的示例,说明了DDR3存储器系统的主要需求以及在类似数据流处理系统中DDR3接口所需的特性。希望能给大家有个客观的认知。   视频处理系统将对于数据带宽的要求推高到了极致:系统可以处理越多的数据,就具有越高的性价比。视频聚合器和路由器可并行处理多个视频流,因此对于匹配数据处理能力和视频带宽的需求就成为了设计的一大挑战。FPGA可通过在单个FPGA中实现多个
[嵌入式]
马达控制三相变频器中相电流Shunt 检测电路设计
概述 磁场定向控制算法(FOC, Field Oriented Control)通过一系列的前向Clarke运算和Park运算将检测得到交流电机的三相相电流处理,间接得到转矩分量和磁通分量,经过经典的PI算法对其进行精确控制,从而保证电机能以最佳的扭矩高效运行,实现精确的速度变化控制,算法框图如图1。由此可知,相电流检测的精度是决定整个电机控制性能的一个重要因素。一般来说,相电流检测共有闭环霍尔,Shunt电阻,开环霍尔三种方式。Shunt电阻因其精度较高(全温范围校正后精度2%至5%),成本低而得到广泛应用。 1 Shunt 电流检测电路设计 图1 磁场定向控制算法框图 常用的Shunt电流检测电路如图2所示。Sh
[嵌入式]
高可靠户外灯光控制电路
  许多社区庭院都采用光控自动照明灯,在清晨和黄昏光线照度临界点附近,环境亮度的变化相当缓慢,导致天黑前和天亮前灯泡频繁闪烁,大大缩短了灯泡的使用寿命。附图所示的电路可克服上述缺点,该电路能根据环境光线是减弱还是增强,迅速把灯泡点亮或熄灭。   傍晚来临时,图中的硫化镉光敏电阻 Rcds 阻值增大,当增加到某一阈值时,双向二极管 VD2 触发双向可控硅 VS 导通,点亮照明灯 HL ,同时,经限流电阻 R3 和 VD1 整流后,为光耦合器 MOC3041 ①、②脚内发光二极管供电,④、⑥脚内光可控硅受光照后导通,使 R4 、 Rcds 串联压降上升, VD2 触发信号加强,使 VS 可靠导通。同理,清晨来临时, Rcds 阻值开始
[电源管理]
高可靠户外灯光<font color='red'>控制</font>电路
小广播
热门活动
换一批
更多
最新应用文章
更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved