C51下的RTX-51实时多任务

上传人:鲁** 文档编号:577868589 上传时间:2024-08-22 格式:PPT 页数:32 大小:351.81KB
返回 下载 相关 举报
C51下的RTX-51实时多任务_第1页
第1页 / 共32页
C51下的RTX-51实时多任务_第2页
第2页 / 共32页
C51下的RTX-51实时多任务_第3页
第3页 / 共32页
C51下的RTX-51实时多任务_第4页
第4页 / 共32页
C51下的RTX-51实时多任务_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《C51下的RTX-51实时多任务》由会员分享,可在线阅读,更多相关《C51下的RTX-51实时多任务(32页珍藏版)》请在金锄头文库上搜索。

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.1

3、.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两个版本的实时多任务操作系统。分别介绍如下。RTX-51

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

5、iny同样允许任务的切换、中断功能的并行应用以及信号传递。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的系统函数时,需要在程序中加入“RTX51TNY.h

6、”头文件。在该头文件中,提供了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的返回值如果为0,则表示信号标

8、志清除成功;如果为-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必须与任务定义时描述的数字一致,其可取值的范围为015。启动任务函数

9、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_task (un

10、signed 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 任务调用的发送信号函数发送信号函数os_send_s

12、ignal主要用于向一个任务发送信号。其函数原型如下。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_wait2等待函数os_wait13等待函数os_wait212.3 RTX-51的任务调度RTX-51实时多任务操作系统和标准的单进程C51程序的主要区别在于任务调度的方式。单进程C51程序主要通过函数调用或中断来实现任务调度。RTX-51多任务程序可以采用4种任务调度方式:循环任务调度、事件任务调度、信号任务调度和抢先任务切换。另外,RTX-51还有一些特有的概念和特性。12.3.1 循环任务调度在RTX-51实时多任务操作系统中,使用一个定时子程序,其由单片机的硬件定时器来完成。这个定时子程序产生周期性的中断,用来驱动RTX-51内核实

14、现时间片的划分。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的事件任务调度便是使用事件来实现多任务之间切换的调度方式。在RTX-51系统中,可以使用os

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

16、抢先任务切换在默认情况下,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信号和事件3信息传递4CAN通信5BITBUS通信1

17、2.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状态:任务正在运行。RTX-51 Tiny中规定,每一个时刻只能有

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

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

20、位变量,主要用于多任务之间的通信。在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系统执行时,一个任务只能在其分配的时间段内执行,然后由RTX-51 Tiny内核切换到另一个任务执行

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

22、。如果需要,则可以修改其中的参数来满足性能的要求。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中的参数,一般用伪指令EQU来指定。下面分别介绍这些参数的功能及用法。12.6 RT

23、X-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-5

24、1 Tiny的技术参数RTX-51 Tiny实时多任务操作系统运行于8051硬件平台,其根据51系列单片机的特点进行了特定的优化和限定 12.6.2 RTX-51 Tiny的注意事项除了上述软件及硬件上的要求外,在进行RTX-51 Tiny实时操作系统程序设计时,还需要注意任务定义、寄存器选择以及中断等事项,下面分别进行介绍。1任务定义2寄存器组选择3中断处理4再入函数5库函数的使用6多数据指针和算术处理器12.7 RTX-51 FULL实时多任务操作系统简介RTX-51 FULL系统和RTX-51Tiny系统的程序设计类似,只不过在RTX-51 FULL系统中提供了对实时多任务操作系统更多的

25、功能支持。下面主要介绍一下,RTX-51 FULL系统中的系统函数以及相关的技术参数。12.7.1 RTX-51 FULL函数一览RTX-51 FULL系统中除了提供了RTX-51 Tiny系统中相同的系统函数外,还提供了一些特有的系统函数。常用的RTX-51 FULL的系统函数,如表12.2所示。12.7.2 RTX-51 的技术参数由于RTX-51 FULL实时多任务操作系统运行于8051单片机平台,其运行需要满足特定的技术要求。RTX-51 FULL的技术参数,如表所示。RTX-51的技术参数描 述RTX-51 Full任务数量最多256个,可同时激活19个RAM需求40到46字节DAT

26、A空间20到200字节IDATA空间(用户堆栈)最少650字节XDATA空间代码大小限制6KB8KB硬件资源要求定时器0或定时器1系统时钟1000到40000个周期中断请求时间50个周期任务切换时间70到100个周期(快速任务)180到700个周期(标准任务),取决于堆栈的负载邮箱系统8个分别带有整数入口的信箱内存池最多16个内存池信号量81位12.8 小结本章详细介绍了RTX-51实时多任务操作系统。RTX-51实时多任务操作系统运行于8051硬件平台,由C51语言来进行编写。RTX-51的程序不同于普通的单片机C51程序,本章对RTX-51的系统函数、任务调度、任务管理以及RTX-51 Tiny的配置和系统要求进行了详细的介绍。在讲解时结合了大量的实例来加深印象和理解。熟练掌握和运用本章内容,可以简化多任务C51单片机程序设计。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号