论文导读:传统的手写代码式嵌入式系统开发方法不够直观,开发周期长,测试和维护困难。图形化编程和自动代码生成技术将成为本世纪嵌入式系统开发的趋势和主流。本文结合车载智能能源分配器的开发,利用Matlab/Stateflow/RTW工具包完成系统建模和代码生成。4)数据类型别名的定义应该和代码测试中所用到的一致。
关键词:嵌入式系统开发,Matlab/Stateflow/RTW,系统建模,自动代码生成,代码测试
0 本文意义
传统的手写代码式嵌入式系统开发方法不够直观,开发周期长,测试和维护困难。图形化编程和自动代码生成技术将成为本世纪嵌入式系统开发的趋势和主流。科技论文。本文结合车载智能能源分配器的开发,利用Matlab/Stateflow/RTW工具包完成系统建模和代码生成。完成测试后自动烧录到微型控制器中,从而起到降低成本和缩短开发周期的作用。
1 系统建模及代码生成
根据厂方要求编辑技术规范并划分子系统,使其成为通用的两种模式:真值表(TrueTable),有限状态机(StateMachine)。子系统独立建模可以使得单个模型容易测试和维护,通常完成建模后应该有自动生成的以下4个文件作为分析备份:
1)测试通过报告(SubSystem_Report.txt)
2)MCDC测试报告(SubSystem_cov.html)
3)Test Case VS Requirment报告(SubSystem_tseq.xls)
4)系统模型 (SubSystem_Report.mdl)
所有的模型都使用模型库进行维护,TLC将保证生成子系统代码只包含.h和.c文件(脚本和TLC只对库进行操作,不对模型进行操作)。这样可以保证代码的唯一性和方便管理。所有模型完成后必须通过功能整合测试。
以下是能源分配器中短路监测中的一个模块为例子:
短路监测功能是输出处理(Output Process)库中的一个子模块,针对不同的控制功能对应不同的监测方案,控制功能包括:前后灯,转向灯,中央控制锁,喇叭,顶棚折叠,座椅折叠等。
Figure 1 RETRY/NO_RETRY Controller State Transition Diagram
如果考虑到大量短路检测和继电器控制,短路检控就变得非常困难。RETRY/NO_RETRY模块将自动控制是否继续对晶闸管进行供电,如果仅依赖硬件过载自动复位将严重影响硬件的寿命。软件控制的原理是短时间内连续检测其短路次数(FETShort_Cnt[n]),如果在极短时间内达到伐值就判断系统确实短路,不再供电。
一旦一个晶闸管达到短路次数达到其寿命的1/3,2/3或者3/3伐值,控制器也将永久关闭对它的供电(NO_RETRY),只有测试工具才能再将其激活。RETRY/NO_RETRY模块的执行顺序永远在Short DetectionController 模块之前。
Figure 2 Short Detection Controller State Transition Diagram
Short DetectionController内部是两个平行的状态机,执行顺序为AàB。科技论文。A状态机用来追踪是否有电流输出及读取晶闸管的反馈以判断是否存在一个短路。B状态机则追踪A状态机的状态并与A前一状态的比对。在算法上A状态机会将短路次数累加Intergrate[n]直到255(不同模块配置不同的累加速率),然后B状态机立刻捕捉到短路情况并终止电流输出。
Figure 3 Short Detect Process Integration
值得一提的是Matlab/Stateflow中提供的计时函数编译完成后有一个机器时钟的延时,对高速信号处理状态机有影响。必须手写嵌入式代码并在编译目标中内嵌手写代码。
Figure 4 Configure Embed Code forComplier Target
自动代码生成脚本中应该注意:
1) 自动脚本的编写应该先验证所有模型变量和数据字典的兼容性并自动生成错误报告;
2) 自动修改模型中的变量类型并选择适合的芯片类型及相关时钟配置设置;
3) TLC的编写和引用并设置代码类型(GRT或者ERT);
4 )数据类型别名的定义应该和代码测试中所用到的一致。
2 代码测试
由于数据截断和可能存在的实际代码和行为模型的不一致将导致自动生成的代码在实际运行中发生错误。如何才能有效地检测自动生成代码,是一个亟需解决的问题。本文给出了在VC++2005编译环境下使用MxVDev作为测试工具的嵌入式系统高效测试机制。
具体操作步骤如下:
1) 将要测试的模型在Matlab中完成系统整合并通过测试,在Signal Builder中保留所有的Test Case。这一步至关重要,开发人员必须保证Test Case的质量,否则将直接影响软件在环测试,硬件在环测试以及最后代码的质量。
2) 完成之后通过Matlab脚本自动将所有的Test Case转化为.xmc文件供测试工具调用(通用机器建模语言)。自动化脚本转换工具可以避免手写代码的失误并大大减少开发时间,特别对于包含大量Test Case的系统开发非常有益。
Figure 5 M-Script Convert tool and VC++ Environment Setup
3) 把驱动层代码,应用层代码,任务调用函数,自动生成的代码,数据流定义(DFA)等文件(所有的代码除了驱动层以外都均可通过Matlab操作API函数完成)在VC++2005环境下配置好,并将调试器设置为MxVDev而不是VC++2005。完成编译后系统会自动启动MxVDev。
4) 启动MxVDev后导入已经完成的.xmc文件,就可以进行软件在环测试,代码级测试非常严格,所有潜在问题均可以显现出来。科技论文。如果测试不通过MxVDev会自动生成测试报告,用于问题分析和方案修改。如果测试通过就可以导出.asv文件进行硬件在环测试。
Figure 6 Software In Loop and HardwareIn Loop Test
3 结束语
本文介绍的嵌入式系统开发和测试机制具有极高的实用价值,有利于整个项目可以有序,分阶段地开展,独创的代码测试机制并使代码质量得到极大的提高。整套开发机制依靠Matlab为核心,过程严谨缜密,为实现嵌入式系统的自动化开发提供了一条新方案。
参考文献:
[1] Robert Bosch GmbH. Autoelektrik, Autoelektronik [M].Braun-schweig: Vieweg Verlag, 2002.
[2] 杨涤.系统实时仿真开发环境与应用[M].北京:清华大学出版社, 2002.
[3] 苏涛,等.DSP 实用技术[M].西安:西安电子科技大学出版社, 2001.
|