[摘要]简要介绍美国Keil公司开发的应用于MCS51系列单片机的实时多任务操作系统RTX51的基本情况和使用方法;分析这个内核的任务管理和内存管理的运行机制及其对硬件的要求,给出其在软件设计中应注意的问题。
[关键词]单片机 C51 RTX51
一、概述
一般说来,单片机的应用系统中都需要同时执行很多任务,我们可以利用实时操作系统来灵活地安排系统资源。RTX51是美国Keil公司开发的一种小型的面向MCS51系列单片机的实时多任务操作系统,它可以工作于8051单片机以及派生家族中,简化了复杂的软件设计,缩短了项目周期。
二、RTX51介绍
RTX51有2个模式:RTX51完全模式和最小模式。RTX51最小模式版是RTX51完全版的一个子集,可以很容易地运行在8051系统上,而不需要外部RAM(DXATA)。RTX51完全模式有4个任务优先级,可以和中断函数并行处理,各个任务之间通过使用“邮箱”系统来进行信号和消息的传递,可以动态地申请和释放内存;同时,可以强制一个任务停止执行,等待一个中断,或者是其它中断传来的信号量或者消息。
(一)RTX51任务
RTX51包括2类任务:快速任务和标准任务。快速任务有很快的响应速度,每个快速任务使用8051一个单独的寄存器组,并且有自己的堆栈区域。RTX51支持最大同时有3个快速任务。标准任务需要多一点的时间来进行任务切换,因此使用的内部RAM相对快速任务要少,所有的标准任务共用1个寄存器组和堆栈。当任务切换的时候,当前任务的寄存器状态和堆栈内容转移到外部存储器中。RTX51支持最大16个标准任务。
(二)RTX51任务状态
(1)运行(RUNNIGN)当前正在运行的任务处于RUNNING状态,同一时间只有1个任务可以运行。(2)就绪(READY)等待运行的任务处于READY状态,在当前运行的任务退出运行状态后,就绪队列中优先级最高的任务进入到运行状态。
(3)阻塞(BLOCKED)等待一个事件的任务处于BLOCKED状态,如果事件发生且优先级比正在运行的任务高,此任务进入运行状态;如果优先级比正在运行的任务低,此任务进入READY状态。(4)删除(DELETED)没有开始的任务处于删除状态。
(三)RTX51中断处理
RTX51完全模式提供2种方法来处理中断:一种是C51的中断函数,另一种是RTX51的中断。它又可以分为快速任务中断和标准任务中断。对于中断函数这种方法,它同时也可以在不使用RTX51的情况下使用,当中断发生的时候,程序就跳到了相应的中断函数,它和正在运行的任务是互相独立的,中断的处理是在RTX51系统之外,和任务切换规则没有关联。对于任务中断的方法,不管使用快速是标准任务来处理中断,如果中断发生,等待中断的任务就从“等待”状态进入到就绪状态,并按照任务切换规则进行切换。
(四)任务调度RTX51
包含一个事件驱动的任务调度机制,它能够按照任务的优先级进行切换,也就是抢占式多任务系统;另外还有一个可选的时间片轮转切换任务模式,在这种模式下,RTX51使用8051内部定时器T0来产生定时节拍,各任务只在各自分配的定时节拍数(时间片)内执行。当时间片用完后,切换至下一任务运行,因此,各任务是并发执行的。同级别的任务是按照时间片分别占用CPU的。RTX51任务有4个优先级:0、1、2可以分配给标准任务,优先级3是为快速任务保留的。每个任务都可以等待事件的发生,而并不增加系统的负担;任务可以等待消息、信号、中断、超时事件或者它们的组合。
(五)任务控制
为了能描述和控制任务的运行,RTX51为每个任务定义了称作任务控制块的数据结构,主要包括四项内容:任务的代码入口地址,位于CODE空间,2字节为一个单位。
任务所使用堆栈栈底位置,位于IDATA空间,1字节为一个单位。
任务的定时节拍计数器,在每一次定时节拍中断后都自减一次。
任务状态寄存器,用其各个位来表示任务所处的状态。位于IDATA空间,以2字节为一单位。
(六)定时器T0中断服务程序的任务
(1)RTX51使用定时器T0作为定时节拍发生器,是任务切换、时间片轮转的依据。(2)更新各个任务节拍数:将各任务节拍数寄存器减1,如果某任务超时(STATE[taskid].timer=0),并且该任务正在等待超时事件,则将该任务置为“READY”状态,使其返回任务队列。
(3)检查自由堆栈空间:若自由堆栈空间范围小于FREESTACK(默认为20字节)时,可以调用宏STACK_ERROR,进行堆栈出错处理。
三、RTX51应用中应注意的问题
原则讲RTX51可以应用到基于MCS51系列单片机组成的任何系统中。RTX51的优点在于软件开发周期短、效率高;由于RTX51在运行时需要占用CPU的部分硬件资源,如通常占用定时/计数器T0,且对堆栈深度要求较高,因此,在使用时应注意RTX51对硬件配置的要求。