欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    RTX51实时多任务操作系统.ppt

    • 资源ID:5446995       资源大小:287KB        全文页数:40页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    RTX51实时多任务操作系统.ppt

    单片机接口技术(C51版),第十三章 RTX51实时多任务操作系统,内容概述,主要介绍多任务编程思想、RTX51操作系统的特点、模式及运行要求,RTX51 的工作原理、RTX51 TINY的配置及基于RTX51 TINY的键盘显示系统设计。教学目标1.了解多任务编程思想,理解多任务编程与单任务编程的区别及优点。2.了解RTX51的完全模式和最小模式的区别。3.理解任务的几种状态及其定义,掌握任务切换过程,能进行简单的任务切换程序设计;理解事件的定义,了解RTX51系统中的超时、间隔、信号、消息、中断等几个事件,能使用os_wait()函数同步2个或几个任务,能使用信号控制任务的启动和停止。4.了解RTX51处理中断的中断函数和RTX51的任务中断(分为快速任务中断和标准任务中断)及实现过程。5.了解 RTX51 TINY的同步机制、调度规则、任务控制块、存储器管理等。掌握 RTX51 TINY的配置,能够修改RTX51 TINY配置文件conf_tny.a51。6.掌握基于RTX51 TINY的键盘、显示系统的程序设计。,131 多任务编程思想,13.1.1 单任务机制工作原理在单任务机制下,各功能模块按固定顺序构成一个整体,作为一个任务得到执行。各个模块要求的执行频率不一致时程序难以满足。需在运行时动态改变执行结构的系统,程序需用许多条件判断和分枝转移语句进行控制,增加了程序的复杂性。其可读性和可维护性很差,调试不便。增加了系统扩充难度。,13.1.2 多任务机制工作原理,各功能模块处于等同地位。各功能模块执行顺序可在程序运行过程中动态地改变。各功能模块的执行频率表现为它们的优先级。各子任务在自已的时间片内运行,通过合理设计时间片大小和各任务的优先级,可以自然地满足系统内各种复杂的时序要求。,13.2 RTX51的特点及运行要求,RTX51 执行循环多任务处理,允许几个循环任务准并行执行。任务并不同时执行而是按时间分段执行,有效的CPU 时间划分成时间段并由RTX51 将时间段分配给每个任务。每个任务允许执行预定数量的时间,然后RTX51 切换到另一个任务运行,时间段非常短,通常仅有几个毫秒,因此任务看起来好象是同时执行的。RTX51 使用一个定时子程序,其中断驱动是由8051的硬件定时器产生周期性中断来驱动RTX51时钟。RTX51 不要求程序中有主函数。它自动从任务0 开始执行,如果有主函数,则必须使用os_create_task(RTX51 Tiny)或os_start_system(RTX51 Full)函数启动RTX51。,13.2.1 RTX51的特点,RTX51有2个模式:RTX51完全模式和最小模式。RTX51 Tiny是RTX51的一个子集,支持RTX51中绝大多数的特性,且不需要外部RAM(XDATA)。RTX51 Tiny 支持RTX51 Full 的许多特性,但不具有以下功能:由循环多任务处理和信号实现任务切换不支持优先任务切换不包含信息子程序无存储器库分配子程序,13.2.2 RTX51对硬件的要求,13.2.3 RTX51对软件的要求,在使用实时多任务操作系统 RTX51 TINY 时,需要以下软件支持:1)C51 编译器 2)BL51 连接定位器 3)A51 宏汇编器 库文件 RTX51TNY.LIB 必须存储在 C51LIB 下,必须指定 C51 运行库的路径。头文件 RTX51TNY.H 必须存储在C51INC下,必须指定C51包含文件的路径。RTX51 TINY 可以在没有外部数据存储器的单片机8051系统中运行,但应用程序可以存取外部存储器。RTX51 TINY 可以使用 C51 编译器支持的存储器模式,存储器模式的选择仅影响应用程序目标文件的定位。RTX51 TINY 的系统变量以及应用程序的堆栈区总是位于8051 的内部数据存储器中(DATA/IDATA),典型地,RTX51 TINY 应用程序应采用 SMALL 编译模式。,13.3 RTX51基本概念及实例分析,13.3.1 任务的状态及定义 RTX51区分2类任务:快速任务和标准任务。快速任务有很快的响应速度,每个快速任务使用8051一个单独的寄存器组,并且有自己的堆栈区域。RTX51支持最大同时有3个快速任务。标准任务需要多一点的时间来进行任务切换,因此使用的内部RAM相对快速任务要少,所有的标准任务共用1个寄存器组和堆栈。当任务切换的时候,当前任务的寄存器状态和堆栈内容转移到外部存储器中。RTX51 FULL支持任务最多达64个,但一般RTX51 TINY支持最大16个标准任务。,RTX51任务状态,1)运行(RUNNING):当前正在运行的任务处于RUNNING状态,同一时间只有1个任务可以运行。2)就绪(READY):等待运行的任务处于READY状态,在当前运行的任务退出运行状态后,就绪队列中优先级最高的任务进入到运行状态。3)阻塞(BLOCKED):等待一个事件的任务处于BLOCKED状态,如果事件发生且优先级比正在运行的任务高,此任务进入运行状态;如果优先级比正在运行的任务低,此任务进入READY状态。4)删除(DELETED):没有开始的任务处于删除状态。,RTX51任务状态,5)任务切换 RTX51是抢占式多任务系统;在时间片轮转模式下,同级别的任务是按照时间片分别占用CPU 的。RTX51任务有4个优先级:0、1、2 可以分配给标准任务,优先级3是为快速任务保留的。每个任务都可以等待事件的发生,而并不增加系统的负担;任务可以等待消息、信号、中断、超时事件或者它们的组合。任务切换是按照一定规则进行的,包括:进入到“就绪”状态的优先级高的任务先执行;如果“就绪”状态的几个任务是同一个优先级,那么最先进入“就绪”状态的先执行。任务状态切换如图13-3-1所示。,图13-3-1 任务状态切换图,例13-3-1 简单的RTX51程序,该程序中的三个任务都是简单的计数器循环,并分别对P1.0、P1.1、P1.2取反。RTX51 开始执行函数名为job0 的任务0,由该任务创建任务1和任务2。程序在任务0执行一段时间后到任务1执行一个时间段,再到任务2执行,在任务2执行一会儿后,RTX51 TINY切换到任务0。该处理过程无限重复下去。#include/*RTX-51 tiny 头文件*/#includelong counter0;/*任务0的计数器*/long counter1;/*任务1的计数器*/long counter2;/*任务2的计数器*/sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;,ob0()_task_ 0 int i;os_create_task(1);/*启动任务 1*/os_create_task(2);/*启动任务 2*/while(1)/*无穷循环*/counter0+;/*counter0 加1*/for(i=0;i1000;i+);P1_0=!P1_0;,job1()_task_ 1 int i;while(1)/*无穷循环*/counter1+;/*counter1加1*/for(i=0;i1000;i+);P1_1=!P1_1;job1()_task_ 1 int i;while(1)/*无穷循环*/counter1+;/*counter1加1*/for(i=0;i1000;i+);P1_1=!P1_1;,13.3.2 RTX51事件,在等待一个任务的时间片到达时,RTX51使用os_wait函数通知RTX51,让另一个任务开始执行。这个功能终止正在运行的当前任务,然后等待指定事件的发生。这时,任意数量的其它任务仍可以执行。RTX51的等待功能支持以下事件:*超时(timeout):挂起运行的任务指定数量的时钟周期。*间隔(interval):类似于超时,但是软件定时器没有复位,典型应用是产生时钟。*信号(signal):用于任务内部同步协调。,RTX51支持的事件,*消息(message):适用于RTX51 Full用于信息的交换。我们可以把一个消息发送到一个特定的邮箱。消息由2字节组成,可以是用户按照自己的需求定义的数据,也可以是指向数据的指针。如果邮箱的消息列表已满,而且是中断发送消息,这个消息将会丢失;如果是任务发送消息,那么任务将会进入到等待状态,直到邮箱重新有了位置可以接收这一条信息。邮箱是按照FIFO的原则来管理消息的,如果几个任务都在等待接收消息,那么最先进入等待接收队列的将接收消息。一个邮箱最多可以存储8条消息。当邮箱满的时候,最多只能有16个等待任务。,RTX51支持的事件,*中断(interrupt):适用于RTX51 Full,一个任务可以等待8051硬件中断。*信号量(semaphore):适用于RTX51 Full,信号量用于管理共享的系统资源。通过使用“令牌”,允许在同一时刻只有一个任务使用某些资源。如果几个任务申请访问同一个资源,那么首先提出申请的将允许访问,其它的任务进入等待队列,直到第1个任务操作完毕,下一个任务才能继续。,1 使用os_wait函数,os_wait()函数挂起一个任务来等待一个事件的发生。这样可以同步2个或几个任务。它的工作过程如下:当任务等待的事件没有发生的时候,系统挂起这个任务;当事件发生时,系统根据任务切换规则切换任务。使用os_wait函数等待的最简单的事件是RTX51 时钟报时信号中的超时周期,该类型的事件可用于需要产生延时的任务。这可用作代码中的切换查询在这样的情况下只需要每50ms 检查一次切换。例13-3-2 下面的例子演示在允许其它任务执行时,如何使用os_wait 函数延迟执行。#include/*RTX-51 tiny functions/*任务1的计数器*/,job0()_task_ 0 os_create_task(1);/*启动任务1*/while(1)/*无穷循环*/counter0+;/*counter0加1*/os_wait(K_TMO,5,0);/*等待超时信号:5个时钟报时*/job1()_task_ 1 while(1)/*无穷循环*/counter1+;/*counter1加1*/os_wait(K_TMO,10,0);/*等待超时信号:10个时钟报时*/job0先启动 job1,然后在counter0加1计数以后job0呼叫 os_wait函数暂停5个时钟报时信号。这时rtx51切换到下一个任务 job1。在 job1增加counter1计数以后,它也调用 os_wait以暂停10个时钟报时信号。现在rtx51没有其他的任务需要执行。因此在它可以延续执行 job0之前,它进入一个空循环,等待5个时钟报时信号过去。本例子的结果是 counter0每5个时钟报时周期加1,而 counter1每10个时钟报时周期加 1。,2 使用RTX51的信号,可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号或旗标。这可以用于协调两个或更多的任务,等待一个信号会系统会执行如下工作:如果一任务在等待一个信号并且信号标志是0,在这个信号被发送之前,这个任务将一直处于挂起状态;如果信号标志已经是1,当任务查询信号时,信号标志会被清除并且继续执行任务。例13-3-3 信号使用示例。#include long counter0;/*任务0的计数器*/long counter1;/*任务1的计数器*/long counter2;/*任务2的计数器*/long counter3;/*任务3的计数器*/,job0()_task_ 0 os_create_task(1);/*启动任务1*/os_create_task(2);/*启动任务2*/os_create_task(3);/*启动任务3*/while(1)/*无穷循环*/counter0+;/*counter0加1*/os_wait(K_TMO,5,0);/*等待超时信号:5个时钟报时*/job1()_task_ 1 while(1)/*无穷循环*/counter1+;/*counter1加1*/os_wait(K_TMO,10,0);/*等待超时信号:10个时钟报时*/,job2()_task_ 2 while(1)/*无穷循环*/counter2+;/*counter2加1*/if(counter2/*收到信号后,counter3加1*/job0中启动任务1、任务2、任务3,counter0和counter1变化同例13-3-2。任务2没有调用os_wait函数,当counter2 加1直到counter2等于0时,任务2发信号给任务3,任务3收到信号后将counter3加1。因此counter2的值是couner3的2的16次方倍。,13.3.3 RTX51中断处理,RTX51完全模式提供2种方法来处理中断:一种是C51的中断函数,另一种是RTX51的任务中断。它又可以分为快速任务中断和标准任务中断。中断函数可以在不使用RTX51的情况下使用,当中断发生的时候,程序就跳到了相应的中断函数,它和正在运行的任务是相互独立的,中断的处理是在RTX51系统之外,和任务切换规则没有关联。对于任务中断的方法,不管使用快速还是标准任务来处理中断,如果中断发生,等待中断的任务就从“等待”状态进入到就绪状态,并按照任务切换规则进行切换。这种中断处理是完全集成在RTX51的内部,硬件中断事件的处理和信号、消息的处理是完全相同的。在系统响应时间上中断函数是最快的。RTX51必须完全控制中断使能寄存器,这样才能遵守任务的切换规则并保证中断程序的无误进行。必须注意中断使能寄存器是由RTX51完全控制的,禁止用户手动修改。,13.3.4 RTX51 TINY的配置,用户可以修改RTX51 TINY配置文件conf_tny.a51,在该文件中可以修改以下参数:用于系统时钟报时中断的寄存器组系统计时器的间隔时间时间片轮转超时值内部数据存储器容量RTX51 Tiny运行之后释放的堆栈大小,配置文件部分配置说明,INT_REGBANK EQU1;定义定时器中断时默认寄存器组1;定义定时器溢出的机器周期数INT_CLOCKEQU10000;默认值为10000个机器周期数;用硬件定时器的脉冲定义任务循环切换时间TIMESHARINGEQU 0;默认值为5个脉冲LONG_USR_INTREQU 0;用户的中断服务程序执行时间比任务循环切换时间短,设为0,否则为1CODE_BANKING EQU 0;用户程序不需要分页,设为0,否则为1;定义CPU堆栈的最高RAM地址RAMTOP EQU 0FFH;默认值为地址(2561)FREE_STACKEQU 20;默认值为堆栈中20个字节的自由空间STACK_ERRORMACROCLREA;禁止中断SJMP$;堆栈耗尽,则无穷循环ENDM,伪指令的变量说明,INT_REGBANK。指示哪些寄存器组将用于RTX51 Tiny的系统中断。INT_CLOCK。定义系统时钟间隔。系统时钟使用这个间隔产生中断,定义的数目确定了每一中断的CPU周期数量。TIMESHARING。定义时间片轮转任务切换的超时时间TIMEOUT。它的值表明了在 RTX51 Tiny切换到另一任务之前时间报时信号中断的数目,如果这个值是 0,时间片轮转多重任务将被禁止。RAMTOP。表明8051派生系列内存储器存储单元的最大尺寸。用于8051,这个值应设定为 7Fh;用于8052,这个值应设定为 0FFh。FREE_STACK。按字节定义了自由堆栈区的大小。当切换任务时,RTX51 Tiny检验堆栈区指定数量的有效字节,如果堆栈区太小,RTX51 Tiny将激活 STACK_ERROR宏,用于 FREE_STACK的缺省值是20,允许值为0-0FFH。STACK_ERROR。RTX51 Tiny检查到一个堆栈问题时是运行的宏 你可以把这个宏改为你的应用程序需要完成的任何操作。,13.4 RTX51 TINY的内核原理,13.4.1 同步机制 为了能保证任务在执行次序上的协调,必须采用同步机制。内核用以下事件进行任务间的通信和同步。1)SIGNAL:用于任务之间通信的位,可以用系统函数置位或清除。如果一个任务调用了os_wait 函数等待 SIGNAL 而S IGNAL 未置位,则该任务被挂起直到SIGNAL置位,才返回到READY状态,并可被再次执行。2)TIMEOUT:由 OS_wait 函数开始的时间延时,其持续时间可由定时节拍数确定。带有TIMEOUT值调用 Os_Wait 函数的任务将被挂起,直到延时结束,才返回到READY状态,并可被再次执行。3)INTERVAL:由 OS_wait 函数开始的时间间隔,其间隔时间可由定时节拍数确定。带有INTERVAL值调用 Os_Wait函数的任务将被挂起,直到间隔时间结束,然后返回到READY状态,并可被再次执行。与TIMEOUT不同的是,任务的节拍计数器不复位。,13.4.2 调度规则,RTX51 TINY使用8051内部定时器TO来产生定时节拍,各任务只在各自分配的定时节拍数(时间片)内执行。当时间片用完后,切换至下一任务运行,因此,各任务是并发执行的。调度规则如下:如果 任务调用了OS_wait 函数,且特定事件还没有发生,任务执行比循环切换所规定的时间长,则运行任务被中断:如果 没有其它任务正在运行;任务处于“READY”或“TIMEOUT”状态下等待运行,则另一个任务开始。,13.4.3 任务控制块,为了能描述和控制任务的运行,内核为每个任务定义了称作任务控制块的数据结构,主要包括三项内容:1)ENTRYtask_id:task_id任务的代码入口地址,位于CODE空间,2字节为个单位;2)STKPtask_id:taskid任务所使用堆栈栈底位置,位于IDATA空间,字节为个单位;3)STATEtaskidtimer和STATEtaskedstate:前者表示任务的定时节拍计数器,在每一次定时节拍中断后都自减一次;后者表示任务状态寄存器,用其各个位来表示任务所处的状态。位于IDATA空间,以2字节为一单位。,13.4.4 存储器管理,内核使用了 KEIL C51 编译器的对全局变量和局部变量采取静态分配存储空间的策略,因此存储器管理简化为堆栈管理。内核为每个任务都保留一个单独的堆栈区,全部堆栈管理都在IDATA空间进行。为了给当前正在运行的任务分配尽可能大的栈区,所以各个任务所用的堆栈位置是动态的,并用STKPtask_id来记录各任务的堆栈栈底位置。当堆栈自由空间小于 FREESTACK(默认为2O)个字节时,就会调用宏STACK-ERROR,进行堆栈出错处理。在以下情况会进行堆栈管理:1)任务切换,将全部自由堆栈空间分配给正在运行的任务;2)任务创建,将自由堆栈空间的2个字节,分配给新创建的任务task_id,并将 ENTRYtask_id,放入其堆栈;3)任务删除,回收被删除的任务task_id的堆栈空间,并转换为自由堆栈空间。,堆栈管理图示,注:(a)任务A正在运行;(b)切换至任务B运行;(c)删除任务C后自由空间增加;(d)创建任务D 后,自由空间减少2字节,13.4.5 代码分析,内核代码用汇编语言写成,可读性差,但代码效率较高,主要由两个源程序文件conf_tnya51和rtxtnya51组成。前者是一个配置文件,用来定义系统运行所需要的全局变量和堆栈出错的宏STACKERROR,这些全局变量和宏,用户都可以根据自己的系统配置灵活修改;后者是系统内核,完成系统调用的所有函数。,13.3.5.1 主程序main,主程序main的主要任务是初始化各任务堆栈栈底指针STKP、状态字STATE和定时器TO,创建任务0并将其导入运行队列。这个过程加上KEIL C5 1的启动代码CSTARTUP正是一般嵌入式系统中BSP所作的工作。,定时器T0中断服务程序,内核使用定时器T0作为定时节拍发生器,是任务切换、时间片轮转的依据。中断服务程序有三个任务。更新各个任务节拍数:将STATEtaskidtimer减1,如果某任务超时(STATEtaskidtimer:0),并且该任务正在等待超时事件,则将该任务置为“READY”状态,使其返回任务队列。检查自由堆栈空间:若自由堆栈空间范围小于FREESTACK(默认为2 0字节)时,可以调用宏STACK_ERROR,进行堆栈出错处理。检查当前任务(处于RUNNING状态)的时间片是否到时。若当前任务的时间片到时,将程序转到任务切换程序段(taskswitching)切换下一任务运行。,定时器T0中断服务程序流程图,图13-4-2 定时器T0中断服务程序流程图,任务切换程序段,整个内核中最核心的程序段,主要功能是完成任务切换。它共有两个入口TASKSWITCHING和SWITCHINGNOW。前者供定时器TO的中断服务程序调用,后能供系统函数os_delete和os_wait调用。相应也有两个不同的出口。工作流程是首先将当前任务置为“TIMEOUT”状态,等待下一次时间片循环,其次找到下一个处于“READY”状态的任务并使其成为当前任务。然后进行堆栈管理,将自由堆栈空间分配给该任务。清除使任务进入“READY”或“TIMEOUT”状态的相关位后,执行该任务。,图13-4-3任务切换流程图,13.5 应用实例,键盘显示系统 例13-5-1图13-5-1是某温度数据采集系统的电路原理图,本书给出基于RTX51 TINY的键盘显示系统的源程序,其它任务如读取A/D数据等可根据需要由读者作为一个任务加入。源程序见程序清单。,温度数据采集系统电路原理图,13.5.2 交通灯控制,RTX51在红绿交通灯控制中的应用。TRAFFIC应用程序由三个文件组成,这三个文件在安装路径下的C51RtxTiny2ExamplesTraffic目录中可以找到。13.3.1 文件功能说明TRAFFIC.C。包括红绿灯控制器的程序,被分成下面几个任务:Task 0 Initialize:初始化串行接口并开始全部其他任务。任务0删除它本身,因为初始化仅需要一次。Task 1 Command:是红绿灯控制器的命令处理程序。这个任务控制和处理串口命令接收。Task 2 Clock:控制定时器。Task 3 Blinking:当时钟时间超过通行时间间隔之外时,黄色灯闪烁。Task 4 Lights:在时钟时间处于通行时间间隔之内,控制红绿灯,允许通行。Task 5 Button:读取行人按下按钮并发送信号给 lights任务Task 6 Quit:在串口字符流中检查ESC字符。如果发现ESC字符,终止前面指定的显示指令,serial.c。实现串行接口的中断驱动。文件包括函数putchar和getkey函数。printf和getline需要调用这两个基本函数。GETLINE.C 是接到来自串口的字符的命令行编辑器 这个源文件也被用于MEASURE应用程序13.3.2 红绿灯控制器命令可以通过8051的串口与红绿灯控制器通信。可用的串行命令由 ASCII字符组成,所有命令必须用回车结束。命令 串口文本 文字说明Display D 显示时钟开始和结束时间Time T hh:mm:ss 按 24小时格式设置当前时间Start S hh:mm:ss 开始按 24小时格式设置启动时间,在开始和结束时间之间红绿灯控制器正常地操作。超过这些时间范围时黄色信号灯闪烁End E hh:mm:ss 按 24小时格式设置结束时间,

    注意事项

    本文(RTX51实时多任务操作系统.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开