版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章RTX51实时操作系统单片机原理、接口及应用内容提要
★前言
★RTX51系统特点★
RTX51的程序结构
★RTX51的功能函数
★RTX51的任务调度
★
RTX51的系统配置
★RTX51的应用举例
★小结
11.1前言
RTX51是一款小巧的针对基于8051系列嵌入式系统的多任务实时操作系统。它的使用可以简化比较复杂、有严格时间限制的软件的设计过程。RTX51主要有两个不同的可用版本:①RTX5lFull版。这里称之为RTX51的标准版,既可以以循环(Round一Robin)方式执行任务,也可以按4级任务优先级的方式切换不同优先级的任务。标准版以并行方式工作,支持中断管理,信号和消息可以通过邮箱系统在不同任务之间传递。
②RTX5lTiny版。这里称之为RTX5l的精简版,是其标准版的一个子集。它可以很容易地运行在8051的单芯片系统而不需要任何外部数据存储器。通用性强,系统需求低,但功能上受到限制。它只支持循环方式和信号方式的任务切换,而不支持优先级方式的任务切换。
由于KEILC中自带了RTX5l的精简版RTX5lTiny,事实上精简版也能够满足绝大部分场合的应用要求,所以以下只讲解RTX5lTiny的内容,出现RTX51的地方默认为其精简版RTX51Tiny。
程序中还有另一个名为job1的任务(设定为任务l)。时间片一般是比较短促的,一个时间片大约只有毫秒级时间。elseprintf("\r");参数event_sel指定了等待的事件,它只能是K_SIG。voidjob1(void)_task_1①RTX5lFull版。voidlights(void)_task_LIGHTSRTX51精简版支持的功能函数如表11-2所示,具体含义分别介绍如下。功能说明判断当前执行任务的编号counter1++;;定义定时器中断用的寄存器组每个任务只允许在预定的时间片中执行,时间片用完时,RTX51就切换至另一个就绪的任务,继续执行一段时间。典型的RTX51Tiny应用程序一般运行于SMALL存储模式下。由于KEILC中自带了RTX5l的精简版RTX5lTiny,事实上精简版也能够满足绝大部分场合的应用要求,所以以下只讲解RTX5lTiny的内容,出现RTX51的地方默认为其精简版RTX51Tiny。3RTX51的程序结构在RTX51TINY环境下生成代码,需要用到下列工具:C51编译器BL51连接/定位器A51宏汇编器
此外,库文件必须存放在环境变量C51LIB所指定的路径下。
RTX51Tiny版可以运行在8051的单芯片嵌入式系统上,且不需要任何外部数据存储器,但也不排斥应用程序访问外部的数据存储器。RTX51Tiny版本可以使用C51所支持的所有存储模式。所使用的存储模式只影响应用对象的存储位置。RTX51Tiny的系统变量和应用程序的堆栈区总是存储在8051的片内RAM中(即DATA和IDATA)。典型的RTX51Tiny应用程序一般运行于SMALL存储模式下。
RTX51Tiny版本使用了8051的定时器0和定时器0的中断信号。SFR中的全局中断允许位或定时器0中断屏蔽位都可能使RTX51Tiny停止运行。因此,除非有特殊的应用目的,应该使定时器0的中断始终开启,以保证RTX51Tiny的正常运行。 实时操作系统的性能参数对嵌入式系统的应用开发也有着直接影响,RTX51的性能参数如表11-1所示。
11.3RTX51的程序结构
RTX51Tiny通过循环(Round-Robin)方式来实现多任务,以达到多个无限循环或任务的准并行执行。这里的多任务并不是真正同时执行的,而是使用不同的时间片来执行,即只是宏观上的同时执行。它将可用的CPU周期分成多个时间片,由RTX51把这些时间片分配给每一个任务使用。每个任务只能在预定的时间片里运行。然后,RTX51再切换到另一个己经准备就绪的任务,让它再执行一定的时间片。 时间片一般是比较短促的,一个时间片大约只有毫秒级时间。正是由于这个原因,在用户看来,多个任务似乎是在同时执行的。
RTX51利用了一个由8051定时器中断信号驱动的定时程序来实现控制。定时器产生的周期性中断信号用来驱动RTX51的定时节拍。 RTX51与用户程序中的main函数是无关的。用户程序中即使没有main程序,操作系统也会自动从设定的任务0开始执行。如果用户程序中已经有了main函数,就必须用人工方式来启动RTX51。这对于RTX51Tiny版,可以调用os_create_task函数来完成.
下面是一个只使用Round-Robin任务方式的简单RTX51程序实例。程序中的两个任务都是简单的计数循环。RTX51从job0函数(设定为任务0)开始执行。程序中还有另一个名为job1的任务(设定为任务l)。系统一旦启动,在job0执行一段时间后,RTx51就自动切换到job1的执行;而job1执行一段时间后,RTX51又切换回job0,……如此无限循环地重复执行下去。#include<rtx51tny.h>intcounter0;intcounter1;voidjob0(void)_task_0{os_create_task(1);/*任务l己准备就绪*/while(1)/*无限循环*/{counter0++;/*更新计数值counter0*/}}voidjob1(void)_task_1{ while(1)/*无限循环*/ { counter1++;/*更新计数值counter1*/}}11.4RTX51的功能函数
RTX51精简版支持的功能函数如表11-2所示,具体含义分别介绍如下。
11.4.1信号控制函数
①isr_send_signal函数原型charisr_send_signal(unsignedchartask_id);功能说明发送一个信号到task_id说明的任务。如果此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号讲存储在此任务的信号标志中。此函数只能从中断函数中调用。返回值
如果执行成功,此函数返回0值;如果所指定的任务不存在,则返回-1。②os_clear_signal函数原型charos_clear_signal(unsignedchartask_id);
功能说明清除由task_id说明的任务的信号返回值
如果信号清除成功,此函数返回0值;如果所指定的任务不存在,则返回-1
③os_send_signal函数原型charos_send_signal(unsignedchartask_id);
功能说明发送一个信号到task_id说明的任务。如果此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号讲存储在此任务的信号标志中。此函数只能在任务函数中调用返回值
如果执行成功,此函数返回0值;如果所指定的任务不存在,则返回-111.4.2任务控制函数
①os_create_task函数原型charos_create_task(unsignedchartask_id);
功能说明启动已定义的由task_id说明的任务。此任务根据RTX51运行规则,标记为就绪,并准备执行。返回值
如果任务成功启动,此函数返回0值;如果没有task_id说明的任务,则返回-1
②os_delete_task函数原型charos_delete_task(unsignedchartask_id);
功能说明停止task_id说明的任务,此任务将从任务表中删除。返回值
如果任务成功启动,此函数返回0值;如果没有task_id说明的任务,则返回-1。
③os_running_task_id函数原型charos_running_task_id(unsignedchartask_id);
功能说明判断当前执行任务的编号返回值
返回当前正在执行的任务的编号,返回值为0~15。
11.4.3延时控制函数
①
os_wait函数原型charos_wait(unsignedcharevent_sel,/*将要等待 的事件*/ unsignedchartisks,/*将要等待的定时器时标数*/ unsignedchardummy);/*未用参数*/功能说明
停止当前执行的任务,并等待一个或多个事件,如时间间隔、超时、从另一个任务或中断发出的信号等。参数event_sel说明所等待的一个事件或几个事件的组合。事件种类如表11-3所示。
表11-4os_wait函数的返回值
②
os_wait1
函数原型charos_wait1(unsignedcharevent_sel);
功能说明暂停当前任务,等待一个事件的发生。它是os_wait函数的一个子集,不接受针对os_wait函数提供的全部事件。参数event_sel指定了等待的事件,它只能是K_SIG。
返回值
当信号事件发生时,任务就被允许执行,任务的执行将恢复。返回用于识别事件、使任务重新启动的常量。
③
os_wait2函数原型charos_wait2(unsignedcharevent_sel,/*将要等 待的事件*/ unsignedchartisks);/*将要等待的定时器时标数*/功能说明与os_wait相同,但是不需要dummy参数。返回值
与os_wait相同
11.5RTX51的任务调度
RTX51利用任务状态来管理各个任务。用户为RTX51定义的每个任务都会以各种状态的某一种来运行。RTX51内核为每个任务保留了适当的状态如表11-5所示。表11-5RTX51的任务状态
RTX51以round-robin多任务方式执行程序,它支持多个无限循环或任务的准并行执行。任务不是被同时执行,而是以分时的方式轮片执行。可用的CPU时钟周期被分成多个时间片,然后由RTX51将这些时间片分配给各个任务。每个任务只允许在预定的时间片中执行,时间片用完时,RTX51就切换至另一个就绪的任务,继续执行一段时间。时间片的具体长度可以用配置函数TIMESHARING来定义。 如果遇到因为一个任务处于等待并且占用了时间片而暂时无法往下执行,可以调用系统函数os_wait来通知RTX51,以便将当前的任务挂起而提前执行另一任务。
RTX51中处理任务分配的模块称为调度程序(Scheduler)。调度程序驱动哪个任务运行是按照以下的规则进行的:(1)如果发生以下情况时,当前运行的任务将被中断:调用os_wait函数,而所等待的事件未来到;任务的执行时间已经超过所定义的Round-Robin循环时间间隔(2)如果发生以下情况时,另一个任务将被启动: 已没有正在执行的任务;将要执行的任务处在就绪状态或超时状态。
11.6RTX51的系统配置
编写RTX51程序需要包含RTX51TNY.H文件。在程序中,需要用一个关键字“_task_”来声明一个函数的任务属性。RTX51程序不需要main函数。在进行连接处理时,会将启动任务0的执行所需要的代码连接进来,作为开始执行的代码。用户可以更改配置文件CONF_TNY.A51中的以下几个参数:①
系统定时器中断所用的寄存器组②
系统定时器的时间间隔③
Round-Robin的超时(time-out)值④
内部数据存储器的大小⑤RTX5l启动后的自由堆栈大小
以下是配置文件的部分内容:;RTX51的硬件定时器;用下面的EQU可预置RTX51的定时器时间常数;用8051定时器0作为控制软件的定时器;定义定时器中断用的寄存器组INT_REGBANK EQU 1;默认为寄存器1组;定义8051定时器0溢出所需的机器周期数INT_CLOCK EQU 10000;默认周期数为10000;定义Round-Robin的Timeout所需的定时器溢出数TIMESHARING EQU 5 ;默认为5次;注意:Round-Robin任务切换可用TIMESHARING为0来屏蔽
;RTX51堆栈空间;以下的EQU语句定义了堆栈区的片内RAM体积和最小自由堆栈空间:定义了堆栈空间耗尽后所执行的宏代码;定义最大的堆栈RAM地址RAMTOP EQU 0FFH ;默认地址是255;定义最小的堆栈自由空间FREE_STACK EQU 20;默认为20字节堆栈自由空间;;发生堆栈用尽时的执行代码STACK_ERRORMACROCLREA ;关闭所有中断SJMP$;如堆栈空间耗尽,进入死循环ENDM在这个配置文件中,定义了许多可以修改的参数,以适应用户特定的应用程序环境。这些参数的说明详见表11-6所示。
voidlights(void)_task_LIGHTS{ while(1) /*任务必须是死循环*/ { os_wait1(K_SIG);/*等待信号量(由clock任务发出)*/ switch(showLightState)/*判断showLightState状态*/ { caseGREEN:/*显示绿灯*/ printf("NOWis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车站装修批荡施工协议
- 防腐施工应急预案合同
- 互联网项目招投标合同注意事项
- 化工行业招待费管理新方法
- 花艺助理劳动合同注意事项
- 供水供电收费管理:发票管理办法
- 食品饮料输送管道施工
- 2025版空置房屋闲置资源盘活利用合作开发合同3篇
- 临时办学场所租赁合同
- 2025版二零二五年度新能源充电桩建设与运营合同3篇
- 2021年12月英语六级听力试题、原文及答案 两套
- cad自定义线型、形定义线型、cad斜坡线学习
- 任上线立塔架线施工专项方案
- 139.华师《管理沟通》期末考试复习资料精简版
- 小学英语不规则动词表
- VIC模型PPT课件
- AQL2.5抽检标准
- 征信知识测试题及答案
- JJF 1629-2017 烙铁温度计校准规范(高清版)
- 理想系列一体化速印机故障代码
- 检验科各专业组上岗轮岗培训考核制度全6页
评论
0/150
提交评论