基于MDK RTX的Cortex-M3多任务应用设计
使用RL—RTX,包含以下几个步骤:
第1步,由于RL—RTX集成在MDK开发套件中,在使用MDK创建工程后,需要在工程中添加RTX内核选项。选择Project→Options for Target,在Operating下拉框中选择RTX内核,使得在编译时把RL—RTX所需的库编译进去。
第2步,在嵌入式应用程序的开发中使用RL—RTX内核,须对其进行配置。复制\Keil\ARM\Startup目录下RTX_Config.c文件到工程文件夹并添加到工程中。该文件中,部分配置参数说明如表3所列。

基于Cortex—M3平台的超温报警器,可以设计3个任务并发,分别进行数据采集、数据处理和数据显示。3个任务较小,系统安排的任务栈足够使用,栈的容量以32位无符号整型定义,容量为64字。选择硬件平台片上定时器1。
DSl8820具有300 ms的更新速率,在采集数据过程中,通过多次采集取平均值,数据采集任务执行的时间为30 ms,数据处理任务执行时间为40 ms,数据显示任务执行时间为20 ms。根据公式,对响应时间的要求:t(响应时间)=N(进程数目)×q(时间片)。总体响应时间为90 ms,进程数目为3,因此时间片设置为30 ms合适。在任务OS_IDLE_DEMON()中添加休眠代码,空闲时系统休眠,降低功耗。
第3步,复制\Keil\ARM\Startup下Retarget.c文件到工程文件夹中,并添加到工程中。
修改文件,使其包含如下内容:

该文件的目的是避免半主机方式软件中断,因为这时所有中断都由RL—RTX统一管理。半主机是用于ARM目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。它由一组已定义的SWI操作来实现。库函数调用相应的SWI(软件中断),然后调试代理程序处理SWI异常,并提供所需的与主机之间的通信。
4 应用设计
4.1 多任务应用设计
根据图1所示的最小系统框图,采用由表及里 (out—side-in approach)分解应用的方法设计多任务。该应用的上下文框图如图3所示,中间的圈表示软件应用,矩形框表示应用的输入和输出设备。箭头标有具体含义名,表示输入和输出通信的流程。

根据上下文框图以及避免“资源冲突”原则,将对同一个外设的访问放在同一个设备中,无论何时切换任务,都不会对任何独立的“外设”造成影响。
将应用分解为4个任务,RL—RTX的第一个任务必须是系统任务Init Task,该任务用来初始化其他3个任务,任务创建完毕后,3个任务都处于READY状态;第2个任务t_phase_ADCTask用来读取A/D采样的数据;第3个任务t_phase_DEA Task用来处理采样的数据;第4个任务t_phase_DIS Task用来将数据送到LCD液晶屏上,显示、控制LED灯闪烁和蜂鸣器高频报警。图4显示了任务触发的流程。
评论