推广新的开发方式? 过去,运行在微控制器上的代码往往可以用一个简单的状态机表示,如今微控制器需要解决多维的问题。今天的微控制器可以通过磁场导向控制(FOC)技术对电动机进行换向操作,并同时运行其他任务。 虽然相关的代码已经存在,但是,实时确定电动机的角度和计算下次换向的时机就已经非常复杂了。 这样的微控制器如果出现在家用洗衣机中的话,我们还需要考虑IEC 60730标准(自动电子控制 – 第1部分:一般要求)。大多数微控制器厂商会提供能够执行CPU寄存器、程序计数器、内存完整性和时钟测试的“B类”库,库代码应该在运行实时电动机控制的同时执行。 系统中一般还会有能快速响应的通讯接口和人机交互界面,嵌入式开发者也许可以保证每个部分都能单独运行,但是整合在一起后系统是否依然可靠呢? 一个选项是用统一建模语言(UML)针对应用进行建模并运行仿真。嵌入式软件开发者往往非常不喜欢这种方式,他们认为这样做是浪费时间:如果有时间建模和运行仿真,还不如直接把代码写出来。 一些人还在系统设计中滥用UML,导致UML染上了不好的名声。抽象的设计方式还意味着不同的开发过程,说服一个开发团队转变开发过程并不是一件容易的事情。 对于在设计和实现中各编程一次的担心,我们称为过程的不连续性(phase discontinuity)。理想状况下,建模过程应该解决这一问题,比如实时面向对象建模(ROOM)领域特定语言(DSL)。 ROOM专门针对事件驱动的实时系统,它支持建模和模拟,还能够生成针对目标硬件的代码。 ROOM从三个维度描述软件:结构、行为和继承。结构可以用角色(actor)通过端口(port)互相通信表示,消息通过运行时软件库进行传递。角色的行为通过多层有限状态机进行表示,并可以图表形式输出。 进入和离开状态的代码可以用代码生成器(比如针对微控制器的C编译器)的目标语言进行定义。当端口接收消息或者收到回应时,状态改变会发生。 继承提供了ROOM中面向对象的部分,既将角色看作可以多次实例化的类。每个实例继承状态机,需要的话,状态机还可以进一步扩展。最后一个概念是分层(layering),它允许应用互相进行通信,或者通过服务访问点(SAP)使用服务(比如定时器)。 Eclipse集成开发环境插件eTrice支持这一软件开发方式。模型可以通过图形或者文本创建,并可以输出C、C++或者Java代码。在模型上运行模拟将会输出消息序列图(MSC),UML工具Trace2UML(Astade[8]的一部分)可以将序列图进行可视化。 图1所示的是一个简单的“乒乓” 样例应用,其中定时器SAP决定了响应延迟的时间。通过图像和ROOM DSL可以检查应用的结构和行为。执行模型将会在命令行上输出结果,模拟的输出是MSC(见图2)。
图1 eTrice“乒乓”样例工程,可以看到“乒”和“乓”的角色(左)以及它们的行为(右)
图2 在“乒乓”模型上运行模拟所产生的消息序列图
|
说的有道理,确实该提高一下了