张林生,袁 勇,毛朝庆
(重庆电子工程职业学院 电子信息系,重庆 401331)
实时多任务操作系统在MCS-51单片机中的应用
张林生,袁 勇,毛朝庆
(重庆电子工程职业学院 电子信息系,重庆 401331)
嵌入式技术是21世纪具有广阔发展前景的技术之一,由于其可靠性高、实时性强、便于开发和维护等诸多特点,而被广泛地应用在各种系统中。本文介绍了RTX-51实时多任务操作系统,通过实例解析其在项目开发中的应用。
实时多任务;MCS-51;RTX-51 Tiny
传统的单片机程序多为单任务系统,其业务逻辑顺序安排在主函数中,主函数是整个程序的入口,一般为死循环,循环过程中通过调用函数未完成相应的操作,而对于一些较短的实时任务则通过中断方式进行处理。此种程序结构简单、直观,易于实现,但对于较复杂的应用此种结构表极为不便,并且不能满足实时性要求较高的场合,因此必须考虑一种新的开发模式。
实时多任务操作系统具有高效的设计、可靠性高、实时性强等优点被广泛应用在嵌入式系统开发中。现在世面上已经存在很多嵌入式操作系统,如uCOS、VxWork、linux、WinCE等等,但这几种操作系统规模较大,对硬件资源要求较高,一般应用在16/32位的处理器中。而对于处理能力有限的MCS-51八位单片机无法支持。
RTX-51是专门应用于MCS-51系列单片机的一种小型的实时多任务操作系统,它允许循环任务切换,支持信号传递,还能并行的利用中断功能,RAM需求量小,非常适合在MCS-51单片机上运行。
RTX-51是德国Keil公司开发的适用于MCS-51单片机的实时多任务操作系统,RTX-51有RTX-51 Full和RTX51 Tiny两个版本。本文以RTX-51 Tiny为例介绍,它支持循环任务切换与信号传递,还能并行的利用中断功能,不提供抢先的任务切换。
在RTX-51系统中就是一个C51函数一个任务,该函数没有返回值,也没有参数。该函数体必须是一个无限的循环,以保证该函数不能返回。实际应用中,一个复杂的系统往往被分解成若干可以并行处理的任务,每个任务只完成一个单一的操作,从而降低系统设计的难度。在RTX-51 Tiny系统中一个具体的任务通过下面的格式定义:
RTX-51 Tiny的用户任务有5种状态,如表1所示。某一时刻用户任务处在某个状态,在一定条件下,任务状态可以发生改变,如图1所示。
表1 RTx-51Ti ng任务状态表
(1)信号:信号是用于任务之间进行通讯的位,可以用系统函数进行置位或复位。如果一个任务调用了os_wait1函数等待信号,而信号未置位,则该任务被挂起直到信号置位,才返回到“就绪状态”,并可以被再次执行。
(2)超时:超时由os_wait2函数开始的时间延时,其持续时间可由定时节拍数确定。调用os_wait2函数的任务将被挂起,直到延时时间到,才返回“就绪状态”,并可以被再次执行。
(3)间隔:间隔由os_wait2函数开始的时间间隔,其持续时间可由定时节拍数确定。调用os_wait2函数的任务将被挂起,直到时间间隔到,才返回“就绪状态”,并可以被再次执行。与超时不同,任务的节拍计数器不复位,因此可以实现准确的定时。
①os_create_task
函数原型:char os_create_task(unsigned char task_id);
功能说明:启动已定义的由task_id说明的任务。此任务根据RTX-51运行规则,标记为就绪,并准备执行。
②os_delete_task
函数原型:char os_delete_task(unsigned char task_id);
功能说明:停止task_id说明的任务,此任务将从任务表中删除。
③os_running_task_id
函数原型:charos_running_task_id(unsignedchartask_id);
功能说明:判断当前执行任务的编号。
函数原型:char os_wait(unsigned char event_sel, unsigned char tisks,unsigned char dummy);功能说明:停止当前执行的任务,并等待一个或多个事件,如时间间隔、超时、从另一个任务或中断发出的信号等。参数event_sel说明所等待的一个事件或几个事件的组合 (可以用字符“|”进行逻辑或)。参数ticks规定等待一个间隔或超时事件的报时信号数目。参数dummy在RTX-51 Tiny中没有使用。
①isr_send_signal
函数原型:char isr_send_signal(unsigned char task_id);
功能说明:发送一个信号到task_id说明的任务。如果此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号将存储在此任务的信号标志中。此函数只能在中断函数中调用。
②os_clear_signal
函数原型:char os_clear_signal(unsigned char task_id);
功能说明:清除由task_id说明的任务的信号。
③os_send_signal
函数原型:char os_send_signal(unsigned char task_id);
功能说明:发送一个信号到task_id说明的任务。如果此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号将存储在此任务的信号标志中。此函数只能在任务函数中调用。
如下图2所示是通过RTX-51系统进行编程实现的,带温度显示的万年历系统。
硬件组成如图2所示。
软件的主程序功能分解成5个子任务。init()任务用于创建其它的任务,它是第一个被系统执行的任务;lcd()任务用来处理在液晶屏1602上显示信息;gettemper()任务用来从DS18b20传感器读取温度值;getclock()任务用来从DS1302芯片中读出时间信息;key()任务用于处理按键操作。程序流程图如图3所示。
主程序的代码如下:
通过实例我们可以看到,在MCS-51单片机中引入微型操作系统RTX-51 Tiny,使我们的开发更加轻松和方便,同时提高了系统的实时性和可靠性。
[1]刘明路,王亮生,李世煜.基于RTX51的单片机软件设计[J].单片机与嵌入式系统应用,2002(3).
[2]欧伟明.面向嵌入式系统设计的RTX51[J].应用技术研究,2007(5).
[3]KEIL Software,Inc.《RTX51 Real-time Kernel》[EB/OL].http: //www.keil.com/rtx51,2004-09-10.
责任编辑 王荣辉
On Application of Real-time Multi-task Operating System in Single chip of MCS-51
ZHANG Linsheng,YUAN Yong,MAO Zhaoqing
(Chongqing College of Electronic Engineering,Department of Electronic Information,Chongqing 401331,China)
The embedded system is one of the most promising technical trends in 21st century.With good reliability and instantaneity,as well as features of being easy to develop and maintain,etc.,it has been widely applied in various systems.An appropriate mini-operating system applied in single chip of MCS-51 is introduced in this thesis;meanwhile,the application of it in developing projects is illustrated with simple examples.
real-time multi-task;MCS-51;RTX-51 Tiny
TP39
A
1674-5787(2010)05-0160-03
2010-07-03
张林生(1981—),男,吉林德惠人,重庆电子工程职业学院,助教,技师,研究方向:计算机应用技术。