用UML建模开发嵌入式软件

发布者:Jinyu2022最新更新时间: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-02 20:37

金立董事长刘立荣:三步解决资金困境 必要时可放弃控制
    证券时报记者 孟庆建   在手机市场的“悲观时刻”,金立公司在这个寒冬中遭遇生死劫难。因为资金链问题被曝出,引发供应链企业以及金融机构等债权方挤兑,多家上游供应链公司受到影响。   金立的资金缺口有多大?如何推动债务问题的解决?拖欠债务能否偿还?1月30日,金立董事长刘立荣接受了证券时报记者采访,旋涡之中的他情绪尚比较乐观:“金立的生产和销售逐渐恢复了正常,我不会跑路,债务一定会一步步偿还。”这位“手机行业围棋下得最好”的企业家近期可能没时间下棋了,他正忙于寻求出售银行股权和物业资产,同时引入战略投资者来解除此次危机。   多家上市公司受影响   2017年,金立手机出货约3000万部,排在中国市场第七位。
[手机便携]
PLC在水工业电机控制中的应用
PLC在水工业电机控制中的应用 关键字:三相异步电机 PLC 梯形图 编程器 1引言 可编程序控制器(PLC, Programmable Logic Controller)是采用微电脑技术制造的自动控制设备。他以顺序控制为主,回路调节为辅,能完成逻辑判断、定时、记忆和算术运算等功能。 随着PLC技术的发展,其功能越来越多,集成度越来越高,网络功能越来越强,PLC与上位PC机联网形成的PLC及其网络技术广泛地应用到工业自动化控制之中,PLC集三电与一体,具有良好的控制精度和高可靠性,使得PLC成为现代工业自动化的支柱。PLC的生产厂家和型号、种类繁多,不同型号自成体系有不同的程序语言和使用方法,本文拟就用
[模拟电子]
PLC在水工业电机<font color='red'>控制</font>中的应用
一种基于MCU+FPGA的LED大屏幕控制系统的设计
  只要在现在的市场上走一圈就会发现,大部分的中小规模 led 显示系统,采用的是传统的单片机作为主控芯片。但是内部资源较少、运行速度较慢的单片机,很难满足LED大屏幕的显示屏,因为系统要求数据传输量大,扫描速度要快。以FPGA作为控制器,一方面,FPGA采用软件编程实现硬件功能,可以有效提高运行速度;另一方面,它的引脚资源丰富,可扩展性强。因此,用单片FPGA和简单的外围电路就可以实现大屏幕LED显示屏的控制,具有集成度高、稳定性好、设计灵活和效率高等优点。   1 系统总体结构   LED大屏幕显示系统由上位机(PC机)、单片机系统、FPGA控制器、LED显示屏的行列驱动电路等模块组成,如图1所示。上位机负责汉字、字符等数
[电源管理]
一种基于MCU+FPGA的LED大屏幕<font color='red'>控制</font>系统的设计
PLC控制电路图及原理讲解
目前使用频率最高的PLC编程语言是结构化文本和梯形图,对于没什么基础的技术人员,从梯形图开始学习PLC编程是最快捷的,不管什么品牌的PLC,其梯形图的结构都和实际电气控制回路相似。下面,我们就推荐几种最常用的控制电路。 1、启动、保持和停止电路 实现Y10的启动、保持和停止的四种梯形图如下图所示。这些梯形图均能实现启动、保持和停止的功能。x0为启动信号,X1为停止信号。图a、c是利用Y10常开触点实现自锁保持,而图b、d是利用SET,RST指令实现自锁保持。 2、多地控制电路 下图是两个地方控制一个继电器线圈的程序。其中X0和X1是一个地方的起动和停止控制按钮,X2和x3是另一个地方的起动和停止控制按钮。 3、互锁控制
[嵌入式]
PLC<font color='red'>控制</font>电路图及原理讲解
现场总线控制系统在煤矿中的应用
1、煤矿井下现行的电气控制系统模式      由于我国目前煤矿井下使用的各种电气控制设备基本都是“单兵作战”,如馈电开关、电磁起动器等都是完成一些特定的功能,相互之间几乎没有任何联系,而且由于各个设备的内部状态不外露或很少外露,给诊断及监视造成很大的困难。另外,如果功能需要增加,就要考虑电气控制设备中的接线端子、喇叭嘴的数量够不够,内部还有没有安装位置等等,这就要对电气控制设备进行改造或重新设计,因此这种控制设备不能,也不可能使煤炭生产自动化,实现无人工作面,必须采用一种新的控制模式取代它。 2 现场总线控制系统     由现场总线构成的控制系统称为现场总线控制系统FCS(Fieldbus Control System)。在F
[嵌入式]
基于CAN总线和双传感器仿人机器人运动控制系统研究
一。引言 机器人研究是自动化领域最复杂。最具挑战性的课题,它集机械。电子。计算机。材料。传感器。控制技术等多门学科于一体,是多学科高技术成果的集中体现。而仿人步行机器人技术的研究更是处于机器人课题研究的前沿,它在一定程度上代表了一个国家的高科技发展水平。运动控制系统是机器人控制技术的核心,也是机器人研究领域的关键技术之一,在机器人控制中具有举足轻重的地位,因此,各研究机构都把对机器人运动控制系统的研究作为首要任务。 动作协调。具有一定智能。能实现无线实时行走已经成为当今机器人发展的主题。随着以电子计算机和数字电子技术为代表的现代高技术的不断发展,特别是以DSP为代表的高速数字信号处理器和大规模可编程逻辑器件(以CPLD和FPG
[工业控制]
基于CAN总线和双传感器仿人机器人运动<font color='red'>控制</font>系统研究
不同电机编码器的结构和工作原理分类图
1 电机的基本介绍 电机,是指根据电磁感应定律,对电能进行转换的执行设备,可根据能量转化的不同,分成电动机和发电机。电动机,俗称马达,即将电能转化为机械能,也是我们常见常用的方式;发电机,即将机械能转化为电能,用于发电等场合。 1.1伺服电机 电机分类方式不同,叫法也各不相同,下面简单通过几种分类方式和流程图,来介绍一下电机的分类。 首先,按照工作电源种类划分,可分为直流电机和交流电机。其中直流电机按照结构和工作原理,又可分为无刷直流电机和有刷直流电机;交流电机,按照电压的不同,又可分为单相电机和三相电机。 图1.1 工作电源种类分类图 其次,按照结构和工作原理划分,可分为直流电机、同步电机和异步电机,其中同步电机
[嵌入式]
不同电机<font color='red'>编码</font>器的结构和工作原理分类图
如何用STM32让相对编码器说话?
▍编码器的由来和原理 若要对伺服系统中的电机进行高精度控制,需要准确的转子角度位置,这时候自然会想到,如果能张江转子每一圈进行细分,这样每次转多少角度便能精确知道。在这样的背景下,相对编码器就诞生了。 在网上找到下文这个图,很形象的表征了相对编码器的原理。 如图所示,在码盘上平均开出很多个等间距的槽,一段是LED灯发出信号,另一端是接收器接收信号。如果信号能穿过码盘,则接收信号为高电平,反之则为低电平。这样当转子转起来以后,就不断的处高低电平。这就是编码器基本原理。 可以看到这里有三个信号,A/B/Z,这时候就要想为什么要3个信号呢?如果仅仅对一圈做细分,命名一个信号就可以了。这就涉及到下面两个问题。 (1)如果是1个信号
[单片机]
如何用STM32让相对<font color='red'>编码</font>器说话?
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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