![]() |
广嵌科技 广嵌教育 English | |
|
用UML建模开发嵌入式软件
来源:单片机及嵌入式系统应用 作者:华中科技大学 郑孝洋 沈安文 陈光东 时间:2007-07-11 发布人:卢春妙
摘 要 针对面向对象开发与C语言的优缺点,提出一种新的方案,用面向对象的思想与开发工具进行软件的设计,用C语言进行编码,给出新方案应用实例,并在此基础上提出几种进一步优化程序性能的方法。新的方案增强了用C语言开发系统软件的可理解性、可移植性和稳定性,同时又保持了C语言高性能与低二进制代码长度的优点。 关键词 面向对象嵌入式 LIML 统一建模语言 引 言 面向对象开发方法无疑是当前最流行的软件开发方法。这归功于面向对象开发的众多优点:可靠性高,所开发的程序更健壮;由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间;继承和封装使得应用程序的修改带来的影响更加局部化,应用程序更易于维护、更新和升级。另外,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 设计过程
出于可移植性的考虑,所有类被分成3个层次:
可以用时序图等对用例进行进一步的分析,“启动”按键按下后处理的时序图如图5所示。
建模过程不是一个直线过程。它往往是一个演化、迭代的过程,不断地分析、评价、修改、再分析,才可能得到一个高质量的模型,为高质量的软件打下基础。
头文件也需要做相应的修改,对变量的定义需要放到源文件里面,如图7所示。
代码修改完成后,剩下的就是C语言的编码过程了。编码时,当调用对象成员时,“.”操作符用“_”代替,则刚好对应上修改后的变量和函数。
③程序中使用查表。对一些很消耗时间资源的非常复杂的运算,可以使用查表的方式。在步进电机的加减速控制中,加减速曲线一般采用指数曲线或者S曲线,运算量较大。可以事先把曲线对应的定时器上界寄存器的值离线计算出来,并片j数组保存起来,需要时直接读数组即可。这种方法通过牺牲空问来换取时间,但是牺牲的是相对宽余的ROM空间,还是比较划算的。
|
相关信息 |
|||||||||||||||||||
| Copyright ©2005-2007 广东省嵌入式软件公共技术中心.All Rights Reserved.版权所有 复制必究 客户服务支持:020-32068395-832 24小时服务热线:13631411558 技术支持与报障:gdesc@midea.com.cn 020-32068395-807/809 粤ICP备05104135号 |