《第10章 实时操作系统RTX51》由会员分享,可在线阅读,更多相关《第10章 实时操作系统RTX51(54页珍藏版)》请在金锄头文库上搜索。
1、第10章 实时操作系统RTX51,1,2,对于单任务应用程序或者简单的前后台应用系统来说,编写简单的监控程序就够了。如简易计算器、防盗报警器、容器温度控制系统等等,学习前面章节的内容就够了。但是,许多单片机应用程序要求同时执行两个或两个以上工作或任务,如汽车发动机控制、防抱死系统(ABS)、飞机管理系统、喷气发动机控制。对于这样的应用程序,监控程序的编写相当困难,而必须要使用实时操作系统RTOS。,3,实时多任务操作系统(RTOS)可以灵活地为几个任务调度系统的资源(CPU、存储器等)。RTX51是一个强大的实时操作系统,而且简单易用。它可以在所有的8051派生产品中使用。本章首先介绍实时操作
2、系统的概念,然后介绍在8051系统中得到应用的RTX51实时操作系统的结构特点和应用实例。,4,本章 内容10.1 实时操作系统 10.2 RTX51实时操作系统 10.3 RTX精简版例程 10.4 RTX全功能版例程,实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能
3、快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。,5,10.1 实时操作系统,多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换和调度。CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行很像前后台系统,只是后台任务有多个。多任务运行使CPU的利用率达到最高,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。,10.1.1 多任务系统,6,一个任务,也称做一个线程,是一个简单的程序,该程序可以认为CPU完全只属于该程序自己。实时应用程序的设计过程包括如何把
4、问题分割成多个任务。每个任务都是整个应用的一部分,都被赋予一定的优先级,有自己的一套CPU寄存器和栈空间。 典型的是,每个任务都是一个无限的循环,都可能处在以下5种状态之一休眠态、就绪态、运行态、挂起态(等待某一事件发生)及被中断态。,10.1.2 多任务系统中任务的定义,7,休眠态相当于任务驻留在内存中,但并不被多任务内核所调度; 就绪态意味着任务已经准备好,可以运行,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行; 运行态是指任务掌握了CPU的使用权,正在运行中; 挂起态也可以叫做等待事件态,指任务在等待,等待某一事件的发生(例如等待某外设的I/O操作,等待某共享资源由暂不
5、能使用变成能使用状态,等待定时脉冲的到来,或等待超时信号的到来,以结束目前的等待,等等);最后,发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。,8,10.1.3 多任务系统中的任务特性,任务就是一个具有独立功能的无限循环的程序段的一次运行活动。任务具有动态性、并发性、异步独立性的特点。1. 动态性: 任务的状态是不断变化的,一般分为:休眠态, 就绪态,运行态,挂起态等。2. 并发性:系统中同时存在多个任务,它们宏观上是同时运行的3. 异步独立性:任务是系统中独立运行的基本单元,也是内核分配和调度的基本单元,每个任务各自按相互独立的不可预知的速度运行,走
6、走停停。每个任务都要安排一个决定其重要性的优先级,都有一个无限循环的程序段规定其功能(如一个C语言过程),并相应有一个数据段、堆栈段及一个任务控制块TCB(用于保存CPU的现场,状态等)。,9,10.1.4 实时操作系统特性,1. 高精度计时系统 计时精度是影响实时性的一个重要因素。在实时应用系统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作系统实现的高精度计时功能。 2. 多级中断机制 一个实时应用系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处理
7、。因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件进行及时响应和处理。,10,3. 实时调度机制 实时操作系统不仅要及时响应实时事件中断,同时也要及时调度运行实时任务。但是,处理机调度并不能随心所欲的进行,因为涉及到两个进程之间的切换,只能在确保“安全切换”的时间点上进行,实时调度机制包括两个方面,一是在调度策略和算法上保证优先调度实时任务;二是建立更多“安全切换”时间点,保证及时调度实时任务。,11,10.2 RTX51实时操作系统,RTX51是用于8051系列单片机的一种多任务实时操作系统(RTOS)。它可以简化具有实时性要求的复杂软件的设计。 RTX51有两个不同版本:
8、RTX51 Full和RTX51 Tiny。 RTX51 Full 允许4个任务优先级的轮转和抢先式任务切换,且它还可以与中断函数并行使用。任务之间可以使用邮箱系统( mailbox system)来传递信号和消息。可以从存储池进行分配或释放存储器,还可以使一个任务等待,如中断、超时、另一个任务或中断的信号及消息。,12,13,RTX51 Tiny是RTX51 Full的子集,可以容易地在没有片外存储器的8051单片机系统上运行。RTX51 Tiny也支持很多RTX51 Full的功能,允许轮转式任务切换,支持信号传递。但它不支持抢先式的任务切换,不能进行信息处理,也不支持存储池的分配和释放。
9、 在许多单片机应用系统中要求能够同时处理多项工作或任务,实时多任务操作系统(RTOS)可以灵活地为几个任务调度系统的资源(CPU、存储器等)。RTX51是一个强大的实时操作系统,而且简单易用。它可以在所有的8051派生产品中使用。 可以用标准C的结构编写RTX-51程序,并用C51编译它们。它只在指定任务ID和优先权方面与标准C有一点不同。RTX-51程序也要求包含实时可执行的头文件,并用BL51链接器定位器和相应的RTX-51库文件链接。,10.2.1 RTX - 51实时操作系统特点,RTX-51实时多任务操作系统,完全不同于一般的单片机C51程序。RTX-51有自己独特的概念和特点: 1
10、. 中断:RTX-51系统可以使用中断,其中断函数以并行方式工作。中断函数可以与RTX-51内核通信,并可以将信号或者消息发送到RTX-51的指定任务中。在RTX-51 FULL中,中断一般配置为一个任务。 2.信息传递:RTX-51 FULL支持任务之间的信息交换,可以使用isr_recv_message、isr_send_message、os_send_message和os_wait函数来实现。在RTX-51系统中,信息是一个可以被存储器看作是数字或者指针的16位数值。RTX-51 FULL中还可以支持使用存储器库系统的变量信息。,14,10.2.1 RTX51实时操作系统特点,3. CA
11、N通信:RTX-51 FULL中集成了一个CAN总线通信模块RTX-51/CAN。通过RTX-51/CAN可以轻松地实现CAN总线的通信。RTX-51 CAN作为一个任务来使用,可以通过CAN网络来实现信息的传递,其他的CAN终端可以配置为一般的C51程序,也可以是RTX-51的实时操作系。4. BITBUS通信: RTX-51 FULL系统中集成了BITBUS主控制器和从控制器。BITBUS任务主要用于支持与Intel 8044之间的信息传递。,15,5. 事件在os_wait函数中,RTX51支持下列事件: Timeout(超时):挂起正在运行的任务,等待规定的时钟滴答数。 Interva
12、l(间隔):这和Timeout很相似,但不是用软件定时器的复位来产生周期性的间隔(时钟要求)。(仅RTX51 Tiny) Signal(信号):任务之间协调。 Message(消息):交换消息。(仅RTX51 Full) Interrupt(中断):一个可以等待8051硬件中断的任务。(仅RTX51 Full) Semaphore(信号量):管理共享的系统资源的二进制信号量。(仅RTX51Full),16,6. 运行环境 RTX-51实时多任务操作系统使用标准的C51来编写程序,可以运行于所有的51系列单片机中。 RTX-51自身提供了灵活的时间分配,以及任务的响应和切换。用户只需要用标准的C
13、51语言编写RTX51 程序,然后用C51编译器编译即可生成代码。其中,仅有少数内容和标准C语言有差异,这些内容是为了实现任务标识和优先级而设置的。 RTX-51 程序设计需要包含实时运行头文件和必要的库文件,并且要用BL51 连接定位器来实现连接。,17,在Keil中,在目标选项的Target标签中的operating中选择RTX-51 Tiny,如图10-1;且在头文件中需要加上#include。在RTX51 TINY环境下生成代码,需要用到下列工具: C51编译器 BL51连接/定位器 A51宏汇编器 此外,库文件RTX51TNY.LIB必须存放在环境变量C51LIB所指定的路径下。,1
14、8,19,图10-1 RTX-51 Tiny的设置界面,RTX51 Tiny的存储模式RTX51 Tiny版可以运行在8051的单芯片嵌入式系统上,且不需要任何外部数据存储器,但也不排斥应用程序访问外部的数据存储器。RTX51 Tiny版本可以使用C51所支持的所有存储模式。所使用的存储模式只影响应用对象的存储位置。RTX51 Tiny的系统变量和应用程序的堆栈区总是存储在8051的片内RAM中(即DATA和IDATA)。典型的RTX51 Tiny应用程序一般运行于SMALL存储模式下。,20,RTX51 Tiny定时使用的定时器RTX51 Tiny版本使用了8051的定时器0和定时器0的中断
15、信号。SFR中的全局中断允许位或定时器0中断屏蔽位都可能使RTX51 Tiny停止运行。因此,除非有特殊的应用目的,应该使定时器0的中断始终开启,以保证RTX51 Tiny的正常运行。,21,7. RTX51的性能参数 实时操作系统的性能参数对嵌入式系统的应用开发也有着直接影响,RTX51的性能参数如表10-1所示。,22,表10-1 RTX51的性能参数,10.2.2 RTX51的系统配置,编写RTX51程序需要包含RTX51TNY.H 文件。在程序中,需要用一个关键字“_task_” 来声明一个函数的任务属性。RTX51程序不需要main 函数。在进行连接处理时,会将启动任务0 的执行所需
16、要的代码连接进来,作为开始执行的代码。 用户可以更改配置文件CONF_TNY.A51中的以下几个参数: 系统定时器中断所用的寄存器组 系统定时器的时间间隔 Round-Robin的超时(time-out)值 内部数据存储器的大小 RTX5l 启动后的自由堆栈大小,23,以下是配置文件的部分内容: ;RTX51 的硬件定时器 ;用下面的EQU可预置RTX51的定时器时间常数 ;用8051 定时器0 作为控制软件的定时器 ;定义定时器中断用的寄存器组INT_REGBANK EQU 1; 默认为寄存器1组 ;定义8051定时器0溢出所需的机器周期数INT_CLOCK EQU 10000 ;默认周期数
17、为10000; 定义Round-Robin的Timeout 所需的定时器溢出数TIMESHARING EQU 5 ; 默认为5次 ; 注意:Round-Robin任务切换可用TIMESHARING为0来屏蔽;,24,;RTX51 堆栈空间 ;以下的EQU语句定义了堆栈区的片内RAM 体积最小自由堆栈空间 ;定义了堆栈空间耗尽后所执行的宏代码 ;定义最大的堆栈RAM 地址RAMTOP EQU 0FFH;默认地址是255 ;定义最小的堆栈自由空间FREE_STACK EQU 20;默认为20 字节堆栈自由空间; ;发生堆栈用尽时的执行代码STACK_ERROR MACRO CLR EA ;关闭所有中断SJMP $ ;如堆栈空间耗尽,进入死循环ENDM 这些参数的说明详见表10-2。,