已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章C51下的RTX-51实时多任务操作系统,在C51语言中,除了可以编写一般的单进程程序外,还可以实现多任务操作系统设计。在51系列单片机上能够运行的实时多任务操作系统为RTX-51。其可以在单个51系列单片机上管理多个进程或者任务。RTX-51使得复杂的多任务程序设计变得简单,因此在51系列单片机中应用很广泛。本章主要介绍RTX-51实时多任务操作系统的种类,并以RTX-51Tiny为主介绍了RTX-51的系统函数、RTX-51的任务管理及配置等。最后,对RTX-51FULL系统进行了介绍。,12.1RTX-51实时多任务操作系统简介,在简单的单片机程序中,采用单一进程并配以中断处理则可以完成大部分的设计需求。但是,对于一些复杂的应用程序,需要同时执行多个进程或者任务。传统的程序设计方式使得程序比较复杂,且程序的运行性能难以满足多任务实时性的要求。此时,便需要实时多任务操作系统(RTOS)。实时多任务操作系统(RTOS)可以灵活地为各个任务分配系统资源,包括CPU、内存以及时间等。因此,CPU同时执行多个任务或者进程,在一定程度上实现多任务并行工作。在51内核单片机中,可以使用RTX-51多任务实时操作系统来实现多任务并行工作。实时多任务操作系统RTX-51使用标准的C51语言来编写,其自身提供了灵活的时间分配和简单有效的系统函数,可以实现多任务的及时响应和切换。,12.1.1单任务程序与多任务程序的比较,对于一般的C51程序,均包含main主函数。程序从main主函数开始执行,是一个单任务单进程的程序。如果程序中使用了中断,则可以在中断发生的时候转向中断服务例程。对于RTX-51实时多任务操作系统,其中可以使用多个任务,则允许多个任务准并行地执行。下面将举例介绍单任务程序和RTX-51多任务程序的区别。1简单的单任务程序2多任务循环程序3RTX-51实时多任务程序,12.1.2RTX-51实时多任务操作系统种类,目前,在KeilVison3集成开发环境中支持RTX-51Tiny和RTX-51FULL两个版本的实时多任务操作系统。分别介绍如下。RTX-51FULL实时多任务操作系统在运行时,允许多达4个优先权任务的切换和循环,并能够并行地利用单片机的中断功能。RTX-51FULL中的os_wait函数可以支持中断、超时、中断或任务的信号、中断或任务的消息以及信号量的事件等待。同时,RTX-51FULL中还可以进行存储器分配及释放。RTX-51FULL还支持程序中的信号传递,以及与系统邮箱(MailboxSystem)和信号量之间的消息传递。RTX-51Tiny实时多任务操作系统是RTX-51FULL的一个子集,主要运行在没有外部扩展存储器的单片机系统中。但是,使用RTX-51Tiny也可以在程序中访问外部的存储器。RTX-51Tiny同样允许任务的切换、中断功能的并行应用以及信号传递。RTX-51Tiny的os_wait函数可以支持超时、时间间隔以及来自中断或任务的信号等待事件。相比RTX-51FULL,在RTX-51Tiny中,不能进行占先式任务处理、消息处理以及存储器的分配和释放。,12.2RTX-51的系统函数,RTX-51实时多任务操作系统的系统函数主要用于任务管理、任务通信以及其他服务。这里以RTX-51Tiny为例进行介绍。RTX-51Tiny是RTX-51FULL的一个简化版本,其可以完成绝大多数的实时多任务操作。在使用RTX-51Tiny的系统函数时,需要在程序中加入“RTX51TNY.h”头文件。在该头文件中,提供了RTX-51Tiny系统函数的说明以及所有常数声明。在RTX-51实时操作系统的系统函数中,以“os_”开头的函数被任务专用,而以“isr_”开头的函数被C51的中断函数专用。,12.2.1中断调用的发送信号函数,发送信号函数isr_send_signal主要用于向另外一个任务发送信号。该函数只能被中断函数调用,其函数原型如下:charisr_send_signal(unsignedchartaskid);其中,参数taskid指定接收信号任务的任务号。发送信号函数isr_send_signal的返回值如果为0,则表示信号发送成功;如果为-1,则表示指向的接收信号任务不存在。使用函数isr_send_signal的程序示例如下。#includevoidtask_isrsendsignal(void)interrupt2isr_send_signal(4);/向任务4发送信号,12.2.2清除信号标志函数,清除信号标志函数os_clear_signal主要用于清除指定任务的信号标志,主要用于选择所定义的输出状态。其函数原型如下:charos_clear_signal(unsignedchartaskid);其中,参数taskid指向所需要清除信号标志的任务号。清除信号标志函数os_clear_signal的返回值如果为0,则表示信号标志清除成功;如果为-1,则表示指向的任务不存在。使用清除信号标志函数os_clear_signal的程序示例如下。#includevoidtask_osclearsignal(void)_task_2os_clear_signal(5);/清除任务5中的信号标志,12.2.3启动任务函数,启动任务函数os_create_task主要用于启动指定任务号的任务。其函数原型如下:charos_create_task(unsignedchartaskid);其中,参数taskid指向所需要启动任务的任务号,taskid必须与任务定义时描述的数字一致,其可取值的范围为015。启动任务函数os_create_task的返回值如果为0,则表示启动任务成功;如果为-1,则表示所指向的任务不存在或者任务无法启动。使用启动任务函数os_create_task的程序示例如下:#include#includevoidntask(void)_task_3/任务3voidtask_oscreatetask(void)_task_2If(os_create_task(3)=-1)/启动任务3Printf(“不能启动任务3”);,12.2.4删除任务函数,删除任务函数os_delete_task主要用于删除指定任务号的任务。其函数原型如下。charos_delete_task(unsignedchartaskid);其中,参数taskid指向所需要删除任务的任务号,taskid必须与任务定义时描述的数字一致,其可取值的范围为015。删除任务函数os_delete_task的返回值如果为0,则表示删除任务成功;如果为-1,则表示指向的任务不存在或者任务没有启动。使用删除任务函数os_delete_task的程序示例如下:#include#includevoidtask_osdeletetask(void)_task_2If(os_delete_task(4)=-1)/删除任务4Printf(“无法删除任务4”);,12.2.5当前任务号函数,当前任务号函数os_running_task_id主要用于获得当前运行任务的任务号,该函数的返回值表示当前任务的任务号。其函数原型如下。charos_running_task_id(void);使用当前任务号函数os_delete_task的程序示例如下:#include#includevoidtask_osrunningtaskid(void)_task_2unsignedcharrtid;rtid=os_running_task_id();/调用当前任务号函数printf(“当前任务号rtid=%dn”,rtid);,12.2.6任务调用的发送信号函数,发送信号函数os_send_signal主要用于向一个任务发送信号。其函数原型如下。charos_send_signal(unsignedchartaskid);其中,参数taskid指向接收信号任务的任务号。发送信号函数os_send_signal的返回值如果为0,则表示信号发送成功;如果为-1,则表示指向的任务不存在。使用发送信号函数os_send_signal的程序示例如下:#includevoidtask_ossendsignal(void)_task_3os_send_signal(4);/向任务4发送信号,12.2.7等待函数,在RTX-51的系统函数中,提供了多个等待函数,分别用于不同的应用场合。下面分别介绍各个等待函数的声明及用法。1等待函数os_wait2等待函数os_wait13等待函数os_wait2,12.3RTX-51的任务调度,RTX-51实时多任务操作系统和标准的单进程C51程序的主要区别在于任务调度的方式。单进程C51程序主要通过函数调用或中断来实现任务调度。RTX-51多任务程序可以采用4种任务调度方式:循环任务调度、事件任务调度、信号任务调度和抢先任务切换。另外,RTX-51还有一些特有的概念和特性。,12.3.1循环任务调度,在RTX-51实时多任务操作系统中,使用一个定时子程序,其由单片机的硬件定时器来完成。这个定时子程序产生周期性的中断,用来驱动RTX-51内核实现时间片的划分。RTX-51循环任务调度便按照预先划分的时间片来循环轮流执行多个任务的。在RTX-51循环任务调度程序中,不要求有main主函数,RTX-51内核自动从第0号任务开始执行。对于某些多任务程序,如果包含main主函数,则需要使用os_create_task(RTX-51Tiny系统)和os_start_system(RTX-51FULL系统)函数来手工启动RTX-51实时多任务操作系统。,12.3.2事件任务调度,RTX-51的事件可以用来更加灵活地为各个任务分配CPU时间,RTX-51的事件任务调度便是使用事件来实现多任务之间切换的调度方式。在RTX-51系统中,可以使用os_wait函数向多任务内核发送事件,暂停当前任务的执行,从而可以实现在等待指定的事件时可以执行其他的任务。最典型的RTX-51事件是时钟信号的超时周期。,12.3.3信号任务调度,在RTX-51实时多任务操作系统中,还提供了使用信号来完成多任务之间切换的调度方式,即RTX-51信号任务调度。在RTX-51系统中,使用os_send_signal函数向另一个任务发送信号,接收信号的任务使用os_wait函数等待该信号。当任务接收到信号后,便结束等待状态,开始向下执行。如果,任务在使用os_wait函数等待接收信号之前,信号已经发送过来,那么该任务将立即继续执行,不再等待信号。,12.3.4优先级及抢先任务切换,在默认情况下,RTX-51所有的任务优先级均为0,这是系统中最低的优先级。在RTX-51FULL中提供了优先级设置及抢先的任务切换,而RTX-51Tiny中则不具备这个功能。RTX-51FULL中优先级可以设置为03,使用“_priority_”来设定。当高优先级任务满足执行条件的时候,RTX-51FULL将中断低优先级的任务执行。,12.3.5RTX-51的主要概念和特性,RTX-51实时多任务操作系统有自己独特的概念和特性。这些特性完全不同于一般的单进程单片机C51程序。下面总结一下常用的RTX-51概念和特性。1中断2信号和事件3信息传递4CAN通信5BITBUS通信,12.4RTX-51Tiny的任务管理,前面介绍了RTX-51的任务调度种类,这里以RTX-51Tiny为例介绍其支持的任务状态以及事件等任务管理。RTX-51Tiny系统作为RTX-51FULL系统的一个子集,其任务管理继承了RTX-51FULL的特性,又有其自身的特点。,12.4.1RTX-51Tiny的任务状态,在RTX-51Tiny系统中支持5种任务状态,这5种状态分别如下所示。READY状态:任务正在等待运行。其前面运行的任务完成后,按照RTX-51Tiny内核的规则开始运行处于等待状态的任务。RUNING状态:任务正在运行。RTX-51Tiny中规定,每一个时刻只能有一个任务处于正在运行状态,即RTX-51实现的是准并行任务执行。WAITING状态:任务处于等待状态。此时,如果指定的事件发生时,任务便进入READY状态。TIMEOUT状态:任务被一个循环超时事件所中断,该状态与状态READY相似。所不同的是,TIMEOUT状态是由RTX-51Tiny系统的内部循环任务切换操作产生的。DELETED状态:任务被删除,不执行。,12.4.2RTX-51Tiny的事件,RTX-51Tiny中使用事件来进行任务管理,其支持的事件包括超时TIMEOUT、时间间隔INTERVAL和信号SIGNAL。这些事件一般在os_wait函数中使用,分别介绍如下。超时TIMEOUT:主要用于os_wait函数开始的时间延时,由RTX-51Tiny的定时器脉冲来确定持续时间。如果一个任务调用os_wait函数函数时带有TIMEOUT参数,则其将被挂起,当延时结束时将返回到READY状态并可以被再次运行。时间间隔事件INTERVAL:主要用于os_wait函数开始的时间间隔,由RTX-51Tiny的定时器脉冲来确定间隔延时时间。RTX-51系统的定时器是不复位的,定时器一直处于运行状态,因此事件INTERVAL将同样一直工作,这与TIMEOUT不同。如果某个任务需要在同步间隔内执行,则可以使用时间间隔事件INTERVAL来完成。信号SIGNAL:信号SIGNAL为位变量,主要用于多任务之间的通信。在RTX-51Tiny系统中,可以使用系统函数置位或者清除信号SIGNAL位。一个任务在运行前可以使用os_wait函数来等待信号SIGNAL置位,如果信号SIGNAL未置位,则该任务将不执行;如果信号SIGNAL置位,该任务返回到READY状态,并可以被RTX-51Tiny再次执行。,12.4.3RTX-51Tiny的任务切换,8051单片机的CPU执行时间被RTX-51Tiny内核划分为多个时间段,系统为每个任务分配一个时间段。在RTX-51Tiny系统执行时,一个任务只能在其分配的时间段内执行,然后由RTX-51Tiny内核切换到另一个任务执行。各个时间段的持续时间可以根据需要修改,在系统的配置文件CONF_TNY.A51中设置,对应的变量为TIMESHARING。RTX-51Tiny系统的循环任务切换允许“准平行”地执行多个循环或者任务。所谓“准平行”,也就是各个任务并不是一直并行运行的,而是各自在其预定的时间段内运行。由于各个任务切换的时间很短,因此可以看作“并行”运行。,12.5RTX-51Tiny的系统配置,在RTX-51实时多任务操作系统中,其系统定时器间隔以及TIMEOUT值等都可以重新配置。RTX-51Tiny的参数配置文件为CONF_TNY.A51。在一般情况下,RTX-51Tiny系统按照默认的参数设置来运行。如果需要,则可以修改其中的参数来满足性能的要求。,12.5.1RTX-51Tiny系统配置文件,这里以RTX-51Tiny为例介绍实时多任务操作系统的配置文件。RTX-51Tiny系统的配置文件CONF_TNY.A51分为两部分,前半部分主要是RTX-51Tiny的系统参数配置,用户可以根据需要更改。后半部分则不需要更改。这里给出RTX-51Tiny的参数配置部分代码,并配合中文注释以便于读者理解。,12.5.2RTX-51Tiny系统参数,RTX-51Tiny系统的配置文件CONF_TNY.A51中的参数,一般用伪指令EQU来指定。下面分别介绍这些参数的功能及用法。,12.6RTX-51Tiny的要求及注意事项,RTX-51Tiny为用户在8051系列单片机上运行实时多任务操作系统提供了便利,然而其对编译环境及硬件有特定的要求。另外,RTX-51Tiny中的函数、指针和寄存器的选择同普通的单片机程序也有所区别,这些在使用时都要及时注意。,12.6.1RTX-51Tiny的要求及技术参数,使用RTX-51Tiny系统时,需要了解其在编译环境、硬件系统方面的要求和技术参数。1RTX-51Tiny系统要求在KeilVision3集成开发环境中使用RTX-51Tiny实时任务操作系统时,需要用到如下的工具:C51编译器A51宏汇编器D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗健康服务合同规范
- 低段识字教学的方法和策略
- 2026年中国泵用输液器行业市场规模及投资前景预测分析报告
- 2026年中国保温水杯行业市场前景预测及投资价值评估分析报告
- 2026年矿业公司实习报告(多)(矿山电气实训报告)
- 显示器相关介绍
- 2026年工业泵项目可行性研究报告
- 甲醛泄漏处置方法
- 低频标签设计专业介绍
- 2026年中国白果叶行业市场规模及未来投资方向研究报告
- 银行面试题目100及最佳答案
- 阴道上皮内瘤变诊治中国专家共识(2024年版)解读
- DB42-T 1989-2023 城乡公益性安葬设施建设与管理规范
- 2025国家开放大学《小学语文教学研究》形考任务1-5答案
- 肠内营养支持护理指南
- 教师名师笔试题库及答案
- 铁路营业线施工安全管理实施细则
- 2025年共同策划城市更新改造项目策划协议
- 生物样本库标准操作流程
- 人教版初一到初三英语单词
- 循证思维在临床护理教学中的应用
评论
0/150
提交评论