RTX51实时操作系统.ppt_第1页
RTX51实时操作系统.ppt_第2页
RTX51实时操作系统.ppt_第3页
RTX51实时操作系统.ppt_第4页
RTX51实时操作系统.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第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 11 2RTX51系统特点 RTX51可以在所有的8051系列芯片上运行 用户只需要用标准的C语言编写RTX51程序 然后用C51编译器编译即可生成代码 其中 仅有少数内容和标准C语言有差异 这些内容是为了实现任务标识和优先级而设置的 RTX51程序设计需要包含实时运行头文件和必要的库文件 并且要用BL51连接 定位器来实现连接 在Keil中 你只需要在目标选项的Target标签中的Operating中选择RTX 51Tiny 在你的头文件中加上 include即可 在RTX51TINY环境下生成代码 需要用到下列工具 C51编译器BL51连接 定位器A51宏汇编器此外 库文件RTX51TNY LIB必须存放在环境变量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 如此无限循环地重复执行下去 includeintcounter0 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值 如果所指定的任务不存在 则返回 1 11 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 REGBANKEQU1 默认为寄存器1组 定义8051定时器0溢出所需的机器周期数INT CLOCKEQU10000 默认周期数为10000 定义Round Robin的Timeout所需的定时器溢出数TIMESHARINGEQU5 默认为5次 注意 Round Robin任务切换可用TIMESHARING为0来屏蔽 RTX51堆栈空间 以下的EQU语句定义了堆栈区的片内RAM体积和最小自由堆栈空间 定义了堆栈空间耗尽后所执行的宏代码 定义最大的堆栈RAM地址RAMTOPEQU0FFH 默认地址是255 定义最小的堆栈自由空间FREE STACKEQU20 默认为20字节堆栈自由空间 发生堆栈用尽时的执行代码STACK ERRORMACROCLREA 关闭所有中断SJMP 如堆栈空间耗尽 进入死循环ENDM在这个配置文件中 定义了许多可以修改的参数 以适应用户特定的应用程序环境 这些参数的说明详见表11 6所示 表11 6配置文件参数说明 11 7RTX51的应用举例 本节给出了一个采用RTX51实现的简单的交通灯控制模拟程序 其目的在于展示RTX51编程的思路与优势 同时为便于学习 又力求程序简单 因此这里通过串口输出模拟了一个人行道上的红绿灯控制过程 车通行 绿灯亮 绿灯保持一段时间后 闪烁几秒转亮黄灯几秒 黄灯没后 红灯亮起 人通行 然后又亮绿灯 周而复始 为方便学习调试 这里采用串口输出不同的文本串来指示绿灯亮 绿灯闪烁 文本串闪烁 黄灯亮 红灯亮4种状态 为便于观察结果 示例程序运行所获的状态持续时间为 绿亮10s 绿闪3s 黄亮3s 红亮10s voidlights void task LIGHTS while 1 任务必须是死循环 os wait1 K SIG 等待信号量 由clock任务发出 switch showLightState 判断showLightState状态 caseGREEN 显示绿灯 printf NOWisgreen 8d r time 串口输出状态和时间 break caseGREENBLINK 绿灯闪烁 if timeBlink 2 如果timeBlink为偶数显示空 否则显示绿灯 printf NOWisgreen 8d r time elseprintf r break caseYELLOW 黄灯 printf NOWisyellow 7d r time 串口输出状态和时间 break caseRED 红灯 printf NOWisre

温馨提示

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

评论

0/150

提交评论