4 应用设计
4.1 多任务应用设计
根据图1所示的最小系统框图,采用由表及里(out—side-in approach)分解应用的方法设计多任务。该应用的上下文框图如图3所示,中间的圈表示软件应用,矩形框表示应用的输入和输出设备。箭头标有具体含义名,表示输入和输出通信的流程。
根据上下文框图以及避免“资源冲突”原则,将对同一个外设的访问放在同一个设备中,无论何时切换任务,都不会对任何独立的“外设”造成影响。
将应用分解为4个任务,RL—RTX的第一个任务必须是系统任务Init Task,该任务用来初始化其他3个任务,任务创建完毕后,3个任务都处于READY状态;第2个任务t_phase_ADC Task用来读取A/D采样的数据;第3个任务t_phase_DEA Task用来处理采样的数据;第4个任务t_phase_DIS Task用来将数据送到LCD液晶屏上,显示、控制LED灯闪烁和蜂鸣器高频报警。图4显示了任务触发的流程。
定义任务:
使用os_tsk_create创建任务t_phase_ADC、t_phase_DEA、t_phase_DIS。
os_tsk_delete_self删除自身任务,实现任务切换。任务的创建和初始化是在主函数中定义的:
任务初始化完毕后,3个任务都处于就绪状态。t_phase_ADC任务用来采样,多次采样取平均值,通过给任务t_phase_DEA发信号signal_func(t_phase_DEA),唤醒t_phase_DEA任务。
os_evt_wait_and进行控制。该任务判断采样的数据是否在警戒温度范围内,如果出现温度异常,置标志位为1。执行完自身任务后,通过signal_func(t_phase_DIS),将唤醒t_phase_DIS任务。
t_phase_DIS任务用来在LCD液晶屏上显示温度值。如果发现标志位为1,则LED灯闪烁和蜂鸣器高频报警。
4.2 应用设计测试
采用基本RMA可调度性测试。式1用来完成系统的基本RMA可调度性测试。
这里:Ci为与周期性任务i相关的最坏执行时间,Ti为与任务i相关的周期,n为任务的个数。
U(n)是利用系数,式1的右边是理论处理器利用率的上界。如果给定一组任务,其处理器利用率小于理论利用率上界,则这组任务是可调度的。U的值随n的增加而下降;当n的值为无限时,最终收敛于69%。
表4总结了使用RMA进行调度的3个任务的特性。
使用式1,该应用设计处理器利用率计算如下:
应用设计总的利用率是27.42%,低于78%的理论边界。此4个任务的系统是可调度的,该应用设计是成功的。
结 语
本文描述了如何在Cortex—M3上使用MDK RL—RTX的方法,并给出了一个简单的多任务应用设计。可以看出多任务的程序设计被大大简化了,它不但满足多个任务的时间要求,降低了开发难度,而且程序的可读性和可维护性也有了很大的提高。利用MDK RL—RTX构建的嵌入式工业控制系统具有成本低、性能高等特点,应用广泛,有着良好的发展前景。