一般说来,单片机的应用系统中都需要同时执行很多任务,我们可以利用实时操作系统来灵活地安排系统资源。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)删除(d)没有开始的任务处于删除状态。
(三)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,如果某任务超时,并且该任务正在等待超时事件,则将该任务置为“ready”状态,使其返回任务队列。
(3)检查自由堆栈空间:若自由堆栈空间范围小于freestack(默认为20字节)时,可以调用宏stack_error,进行堆栈出错处理。
三、rtx51应用中应注意的问题
原则讲rtx51可以应用到基于mcs51系列单片机组成的任何系统中。rtx51的优点在于软件开发周期短、效率高;由于rtx51在运行时需要占用cpu的部分硬件资源,如通常占用定时/计数器t0,且对堆栈深度要求较高,因此,在使用时应注意rtx51对硬件配置的要求。
(一)rtx51对硬件的要求
rtx51分为完全模式和最小模式,对于rtx51完全模式,要求系统要有外部ram,同时,还应合理分配cpu的硬件资源,留出定时/计数器t0作为系统多任务执行的时间片发生器;对于简单的嵌入式系统,由于通常没有外部ram,通常选择rtx51最小模式。在最小模式下,定时/计数器t0用户不能使用,而是留给系统作多任务切换的时间片发生器。
(二)合理分配任务的时间片数和任务优先级
在执行多任务时,由于各个任务处理时,需要的时间不同,任务对实时性要求不同,所以,应合理配置各个任务的时间片数,尽量使任务在规定的时间片内完成,减少任务间的消息传递,确保系统资源的使用效率。在rtx51完全模式下,应注意各个任务的优先级配置;在rtx51最小模式下,各个任务没有优先级规定,各任务只能在时间片定时器的控制下并行执行。
四、结论
在can局域网节点设计过程中,我们成功地将rtx51最小模式应用到系统之中,简化了系统的软件设计,提高了开发效率,缩短了开发周期。