第12章C51下的RTX-51实时多任务_第1页
第12章C51下的RTX-51实时多任务_第2页
第12章C51下的RTX-51实时多任务_第3页
第12章C51下的RTX-51实时多任务_第4页
第12章C51下的RTX-51实时多任务_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第12章 C51下的RTX-51实时多任务操作系统 在C51语言中,除了可以编写一般的单进程程序外,还可以实现多任务操作系统设计。在51系列单片机上能够运行的实时多任务操作系统为RTX-51。其可以在单个51系列单片机上管理多个进程或者任务。RTX-51使得复杂的多任务程序设计变得简单,因此在51系列单片机中应用很广泛。 本章主要介绍RTX-51实时多任务操作系统的种类,并以RTX-51 Tiny为主介绍了RTX-51的系统函数、RTX-51的任务管理及配置等。最后,对RTX-51 FULL系统进行了介绍。12.1 RTX-51实时多任务操作系统简介在简单的单片机程序中,采用单一进程并配以中断

2、处理则可以完成大部分的设计需求。但是,对于一些复杂的应用程序,需要同时执行多个进程或者任务。传统的程序设计方式使得程序比较复杂,且程序的运行性能难以满足多任务实时性的要求。此时,便需要实时多任务操作系统(RTOS)。实时多任务操作系统(RTOS)可以灵活地为各个任务分配系统资源,包括CPU、内存以及时间等。因此,CPU同时执行多个任务或者进程,在一定程度上实现多任务并行工作。在51内核单片机中,可以使用RTX-51多任务实时操作系统来实现多任务并行工作。实时多任务操作系统RTX-51使用标准的C51语言来编写,其自身提供了灵活的时间分配和简单有效的系统函数,可以实现多任务的及时响应和切换。12

3、.1.1 单任务程序与多任务程序的比较 对于一般的C51程序,均包含main主函数。程序从main主函数开始执行,是一个单任务单进程的程序。如果程序中使用了中断,则可以在中断发生的时候转向中断服务例程。对于RTX-51实时多任务操作系统,其中可以使用多个任务,则允许多个任务准并行地执行。下面将举例介绍单任务程序和RTX-51多任务程序的区别。 1简单的单任务程序 2多任务循环程序 3RTX-51实时多任务程序12.1.2 RTX-51实时多任务操作系统种类目前,在Keil Vison3集成开发环境中支持RTX-51 Tiny和RTX-51 FULL两个版本的实时多任务操作系统。分别介绍如下。R

4、TX-51 FULL实时多任务操作系统在运行时,允许多达4个优先权任务的切换和循环,并能够并行地利用单片机的中断功能。RTX-51 FULL中的os_wait函数可以支持中断、超时、中断或任务的信号、中断或任务的消息以及信号量的事件等待。同时,RTX-51 FULL中还可以进行存储器分配及释放。RTX-51 FULL还支持程序中的信号传递,以及与系统邮箱(Mailbox System)和信号量之间的消息传递。RTX-51 Tiny实时多任务操作系统是RTX-51 FULL的一个子集,主要运行在没有外部扩展存储器的单片机系统中。但是,使用RTX-51 Tiny也可以在程序中访问外部的存储器。RT

5、X-51 Tiny同样允许任务的切换、中断功能的并行应用以及信号传递。RTX-51 Tiny的os_wait函数可以支持超时、时间间隔以及来自中断或任务的信号等待事件。相比RTX-51 FULL,在RTX-51 Tiny中,不能进行占先式任务处理、消息处理以及存储器的分配和释放。12.2 RTX-51的系统函数 RTX-51实时多任务操作系统的系统函数主要用于任务管理、任务通信以及其他服务。这里以RTX-51 Tiny为例进行介绍。RTX-51 Tiny是RTX-51 FULL的一个简化版本,其可以完成绝大多数的实时多任务操作。在使用RTX-51 Tiny的系统函数时,需要在程序中加入“RTX

6、51TNY.h”头文件。在该头文件中,提供了RTX-51 Tiny系统函数的说明以及所有常数声明。 在RTX-51实时操作系统的系统函数中,以“os_”开头的函数被任务专用,而以“isr_”开头的函数被C51的中断函数专用。12.2.1 中断调用的发送信号函数发送信号函数isr_send_signal主要用于向另外一个任务发送信号。该函数只能被中断函数调用,其函数原型如下:char isr_send_signal(unsigned char taskid);其中,参数taskid指定接收信号任务的任务号。发送信号函数isr_send_signal的返回值如果为0,则表示信号发送成功;如果为-1

7、,则表示指向的接收信号任务不存在。使用函数isr_send_signal的程序示例如下。#include void task_isrsendsignal(void)interrupt 2isr_send_signal(4);/向任务4发送信号 12.2.2 清除信号标志函数清除信号标志函数os_clear_signal主要用于清除指定任务的信号标志,主要用于选择所定义的输出状态。其函数原型如下:char os_clear_signal (unsigned char taskid);其中,参数taskid指向所需要清除信号标志的任务号。清除信号标志函数os_clear_signal的返回值如果为

8、0,则表示信号标志清除成功;如果为-1,则表示指向的任务不存在。使用清除信号标志函数os_clear_signal的程序示例如下。#include void task_osclearsignal (void)_task_ 2os_clear_signal (5);/清除任务5中的信号标志12.2.3 启动任务函数启动任务函数os_create_task主要用于启动指定任务号的任务。其函数原型如下:char os_create_task (unsigned char taskid);其中,参数taskid指向所需要启动任务的任务号,taskid必须与任务定义时描述的数字一致,其可取值的范围为01

9、5。启动任务函数os_create_task的返回值如果为0,则表示启动任务成功;如果为-1,则表示所指向的任务不存在或者任务无法启动。使用启动任务函数os_create_task的程序示例如下:#include #include voidntask(void)_task_ 3/任务3void task_oscreatetask (void)_task_ 2If(os_create_task (3)=-1)/启动任务3Printf(“不能启动任务3”);12.2.4 删除任务函数删除任务函数os_delete_task主要用于删除指定任务号的任务。其函数原型如下。char os_delete_

10、task (unsigned char taskid);其中,参数taskid指向所需要删除任务的任务号,taskid必须与任务定义时描述的数字一致,其可取值的范围为015。删除任务函数os_delete_task的返回值如果为0,则表示删除任务成功;如果为-1,则表示指向的任务不存在或者任务没有启动。使用删除任务函数os_delete_task的程序示例如下:#include #include void task_osdeletetask (void)_task_ 2If(os_delete_task (4)=-1)/删除任务4Printf(“无法删除任务4”); 12.2.5 当前任务号函

11、数当前任务号函数os_running_task_id主要用于获得当前运行任务的任务号,该函数的返回值表示当前任务的任务号。其函数原型如下。char os_running_task_id (void);使用当前任务号函数os_delete_task的程序示例如下:#include #include void task_ osrunningtaskid (void)_task_ 2unsigned char rtid;rtid= os_running_task_id();/调用当前任务号函数printf(“当前任务号rtid=%dn”,rtid);12.2.6 任务调用的发送信号函数发送信号函数o

12、s_send_signal主要用于向一个任务发送信号。其函数原型如下。char os_send_signal(unsigned char taskid);其中,参数taskid指向接收信号任务的任务号。发送信号函数os_send_signal的返回值如果为0,则表示信号发送成功;如果为-1,则表示指向的任务不存在。使用发送信号函数os_send_signal的程序示例如下:#include void task_ossendsignal(void)_task_ 3os_send_signal(4);/向任务4发送信号12.2.7 等待函数 在RTX-51的系统函数中,提供了多个等待函数,分别用于

13、不同的应用场合。下面分别介绍各个等待函数的声明及用法。 1等待函数os_wait 2等待函数os_wait1 3等待函数os_wait212.3 RTX-51的任务调度 RTX-51实时多任务操作系统和标准的单进程C51程序的主要区别在于任务调度的方式。单进程C51程序主要通过函数调用或中断来实现任务调度。RTX-51多任务程序可以采用4种任务调度方式:循环任务调度、事件任务调度、信号任务调度和抢先任务切换。另外,RTX-51还有一些特有的概念和特性。12.3.1 循环任务调度 在RTX-51实时多任务操作系统中,使用一个定时子程序,其由单片机的硬件定时器来完成。这个定时子程序产生周期性的中断

14、,用来驱动RTX-51内核实现时间片的划分。RTX-51循环任务调度便按照预先划分的时间片来循环轮流执行多个任务的。 在RTX-51循环任务调度程序中,不要求有main主函数,RTX-51内核自动从第0号任务开始执行。对于某些多任务程序,如果包含main主函数,则需要使用os_create_task(RTX-51 Tiny系统)和os_start_system(RTX-51 FULL系统)函数来手工启动RTX-51实时多任务操作系统。12.3.2 事件任务调度 RTX-51的事件可以用来更加灵活地为各个任务分配CPU时间,RTX-51的事件任务调度便是使用事件来实现多任务之间切换的调度方式。在

15、RTX-51系统中,可以使用os_wait函数向多任务内核发送事件,暂停当前任务的执行,从而可以实现在等待指定的事件时可以执行其他的任务。最典型的RTX-51事件是时钟信号的超时周期。12.3.3 信号任务调度 在RTX-51实时多任务操作系统中,还提供了使用信号来完成多任务之间切换的调度方式,即RTX-51信号任务调度。在RTX-51系统中,使用os_send_signal函数向另一个任务发送信号,接收信号的任务使用os_wait函数等待该信号。当任务接收到信号后,便结束等待状态,开始向下执行。如果,任务在使用os_wait函数等待接收信号之前,信号已经发送过来,那么该任务将立即继续执行,不

16、再等待信号。12.3.4 优先级及抢先任务切换 在默认情况下,RTX-51所有的任务优先级均为0,这是系统中最低的优先级。在RTX-51 FULL中提供了优先级设置及抢先的任务切换,而RTX-51 Tiny中则不具备这个功能。 RTX-51 FULL中优先级可以设置为03,使用“_priority_”来设定。当高优先级任务满足执行条件的时候,RTX-51 FULL将中断低优先级的任务执行。12.3.5 RTX-51的主要概念和特性 RTX-51实时多任务操作系统有自己独特的概念和特性。这些特性完全不同于一般的单进程单片机C51程序。下面总结一下常用的RTX-51概念和特性。 1中断 2信号和事

17、件 3信息传递 4CAN通信 5BITBUS通信12.4 RTX-51 Tiny的任务管理 前面介绍了RTX-51的任务调度种类,这里以RTX-51 Tiny为例介绍其支持的任务状态以及事件等任务管理。RTX-51 Tiny系统作为RTX-51 FULL系统的一个子集,其任务管理继承了RTX-51 FULL的特性,又有其自身的特点。12.4.1 RTX-51 Tiny的任务状态在RTX-51 Tiny系统中支持5种任务状态,这5种状态分别如下所示。READY状态:任务正在等待运行。其前面运行的任务完成后,按照RTX-51 Tiny内核的规则开始运行处于等待状态的任务。RUNING状态:任务正在

18、运行。RTX-51 Tiny中规定,每一个时刻只能有一个任务处于正在运行状态,即RTX-51实现的是准并行任务执行。WAITING状态:任务处于等待状态。此时,如果指定的事件发生时,任务便进入READY状态。TIMEOUT状态:任务被一个循环超时事件所中断,该状态与状态READY相似。所不同的是,TIMEOUT状态是由RTX-51 Tiny系统的内部循环任务切换操作产生的。DELETED状态:任务被删除,不执行。12.4.2 RTX-51 Tiny的事件RTX-51 Tiny中使用事件来进行任务管理,其支持的事件包括超时TIMEOUT、时间间隔INTERVAL和信号SIGNAL。这些事件一般在

19、os_wait函数中使用,分别介绍如下。超时TIMEOUT:主要用于os_wait函数开始的时间延时,由RTX-51 Tiny的定时器脉冲来确定持续时间。如果一个任务调用os_wait函数函数时带有TIMEOUT参数,则其将被挂起,当延时结束时将返回到READY状态并可以被再次运行。时间间隔事件INTERVAL:主要用于os_wait函数开始的时间间隔,由RTX-51 Tiny的定时器脉冲来确定间隔延时时间。RTX-51系统的定时器是不复位的,定时器一直处于运行状态,因此事件INTERVAL将同样一直工作,这与TIMEOUT不同。如果某个任务需要在同步间隔内执行,则可以使用时间间隔事件INTE

20、RVAL来完成。信号SIGNAL:信号SIGNAL为位变量,主要用于多任务之间的通信。在RTX-51 Tiny系统中,可以使用系统函数置位或者清除信号SIGNAL位。一个任务在运行前可以使用os_wait函数来等待信号SIGNAL置位,如果信号SIGNAL未置位,则该任务将不执行;如果信号SIGNAL置位,该任务返回到READY状态,并可以被RTX-51 Tiny再次执行。12.4.3 RTX-51 Tiny的任务切换8051单片机的CPU执行时间被RTX-51 Tiny内核划分为多个时间段,系统为每个任务分配一个时间段。在RTX-51 Tiny系统执行时,一个任务只能在其分配的时间段内执行,

21、然后由RTX-51 Tiny内核切换到另一个任务执行。各个时间段的持续时间可以根据需要修改,在系统的配置文件CONF_TNY.A51中设置,对应的变量为TIMESHARING。RTX-51 Tiny系统的循环任务切换允许“准平行”地执行多个循环或者任务。所谓“准平行”,也就是各个任务并不是一直并行运行的,而是各自在其预定的时间段内运行。由于各个任务切换的时间很短,因此可以看作“并行”运行。12.5 RTX-51 Tiny的系统配置 在RTX-51实时多任务操作系统中,其系统定时器间隔以及TIMEOUT值等都可以重新配置。RTX-51 Tiny的参数配置文件为CONF_TNY.A51。在一般情况

22、下,RTX-51 Tiny系统按照默认的参数设置来运行。如果需要,则可以修改其中的参数来满足性能的要求。12.5.1 RTX-51 Tiny系统配置文件 这里以RTX-51 Tiny为例介绍实时多任务操作系统的配置文件。RTX-51 Tiny系统的配置文件CONF_TNY.A51分为两部分,前半部分主要是RTX-51 Tiny的系统参数配置,用户可以根据需要更改。后半部分则不需要更改。这里给出RTX-51 Tiny的参数配置部分代码,并配合中文注释以便于读者理解。12.5.2 RTX-51 Tiny系统参数 RTX-51 Tiny系统的配置文件CONF_TNY.A51中的参数,一般用伪指令EQ

23、U来指定。下面分别介绍这些参数的功能及用法。12.6 RTX-51 Tiny的要求及注意事项 RTX-51 Tiny为用户在8051系列单片机上运行实时多任务操作系统提供了便利,然而其对编译环境及硬件有特定的要求。另外,RTX-51 Tiny中的函数、指针和寄存器的选择同普通的单片机程序也有所区别,这些在使用时都要及时注意。12.6.1 RTX-51 Tiny的要求及技术参数使用RTX-51 Tiny系统时,需要了解其在编译环境、硬件系统方面的要求和技术参数。1RTX-51 Tiny系统要求在Keil Vision3集成开发环境中使用RTX-51 Tiny实时任务操作系统时,需要用到如下的工具:C51编译器A51宏汇编器DL51连接定位器 2RTX-51 Tiny的技术参数RTX-51 Tiny实时多任务操作系统运行于8051硬件平台,其根据51系列单片机的特点进行了特定的优化和限定 12.6.2 RTX-51 Tiny的注意事项 除了上述软件及硬件上的要求外,在进行RTX-51 Tiny实时操作系统程序设计时,还需要注意任务定义、寄存器选择以及中断等事项,下面分别进行介绍。 1任务定义 2寄存器组选择 3中断处理 4再入函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论