RTX51实时操作系统课件.ppt

上传人(卖家):三亚风情 文档编号:3347766 上传时间:2022-08-22 格式:PPT 页数:47 大小:465KB
下载 相关 举报
RTX51实时操作系统课件.ppt_第1页
第1页 / 共47页
RTX51实时操作系统课件.ppt_第2页
第2页 / 共47页
RTX51实时操作系统课件.ppt_第3页
第3页 / 共47页
RTX51实时操作系统课件.ppt_第4页
第4页 / 共47页
RTX51实时操作系统课件.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第第1010章章 RTX51RTX51实时操作系统实时操作系统 操作系统基本概念操作系统基本概念 RTX51RTX51系统特点系统特点 RTX51RTX51的程序结构的程序结构 RTX51RTX51的功能函数的功能函数 RTX51RTX51的任务调度的任务调度 RTX51RTX51的系统配置的系统配置 RTX51RTX51的应用举例的应用举例第1页,共47页。10.1 10.1 操作系统基本概念操作系统基本概念10.1.1 10.1.1 前后台系统前后台系统 前后台系统的组成:前台和后前后台系统的组成:前台和后台程序台程序 后台:后台:是一个无限循环的应是一个无限循环的应用程序,循环中调用相应

2、的任用程序,循环中调用相应的任务函数完成相应的操作,各个务函数完成相应的操作,各个任务依次运行,没有调度,运任务依次运行,没有调度,运行的次序不能改变。行的次序不能改变。前台:前台:是中断服务程序,处理是中断服务程序,处理异步事件。异步事件。第2页,共47页。适用情形:适用情形:一般不复杂且实时性要求不高的小系统很适合采用前后台系统,例如微波炉、电话机、玩具等。在另外一些基于省电的应用中,由于平时微处理器处在停机状态,所有的事都靠中断服务来完成,因此也常常采用前后台系统模式。第3页,共47页。10.1.2 10.1.2 操作系统操作系统 操作系统(操作系统(Operating SystemOp

3、erating System,简称,简称OSOS)是计算机中)是计算机中最基本的程序。操作系统负责计算机系统中全部软、硬资最基本的程序。操作系统负责计算机系统中全部软、硬资源的分配以及回收、控制与协调等并发的活动;操作系统源的分配以及回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。用户扩展新的系统功能提供软件平台。操作系统的主要包括四大功能:操作系统的主要包括四大功能:处理机管理:解决处理机管理:解决CPUCPU的分时复用。的分时复用。存储管理:配合存储管理:配合CPUC

4、PU调度内存。调度内存。设备管理:分配外设的使用,包括独享、共享和虚拟。设备管理:分配外设的使用,包括独享、共享和虚拟。软件资源管理:解决程序和信息的存取和管理等问题。软件资源管理:解决程序和信息的存取和管理等问题。第4页,共47页。实时操作系统(实时操作系统(RTOSRTOS)是指当外界事件或数据产生时,)是指当外界事件或数据产生时,能够接受并以能够接受并以足够快的速度足够快的速度予以处理,其处理的结果又能在予以处理,其处理的结果又能在规定的时间规定的时间之内来控制生产过程或对处理系统作出快速响应,之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。并控制所

5、有实时任务协调一致运行的操作系统。用户的应用程序是运行于用户的应用程序是运行于RTOSRTOS之上的各个任务,之上的各个任务,RTOSRTOS根根据各个任务的要求,进行资源(包括存储器、外设等)管理、据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度和异常处理等工作。消息管理、任务调度和异常处理等工作。实时多任务操作系统,以分时方式运行多个任务,看上实时多任务操作系统,以分时方式运行多个任务,看上去好像是多个任务去好像是多个任务“同时同时”运行。任务之间的切换应当以优运行。任务之间的切换应当以优先级为根据,只有具有先级为根据,只有具有优先服务方式优先服务方式的的RTOSR

6、TOS才是真正的实时才是真正的实时操作系统,而时间分片方式和协作方式的操作系统,而时间分片方式和协作方式的RTOSRTOS并不是真正的并不是真正的“实时实时”。10.1.3 10.1.3 实时操作系统实时操作系统第5页,共47页。10.1.4 10.1.4 临界区临界区 临界资源:任何时候都只允许一个任务访问的资源。临界资源:任何时候都只允许一个任务访问的资源。临界区或临界段:用于访问临界资源的代码段。临界区或临界段:用于访问临界资源的代码段。临界代码段临界代码段不允许多个并发任务交叉执行不允许多个并发任务交叉执行,否则会产生严重后,否则会产生严重后果,比如进入中断后的现场保护代码等。果,比如

7、进入中断后的现场保护代码等。为确保临界区代码的安全执行,在进入临界区之前要关中断,而为确保临界区代码的安全执行,在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断临界区代码执行完以后要立即开中断第6页,共47页。程序运行时可使用的软、硬件环境统称为资源。资源程序运行时可使用的软、硬件环境统称为资源。资源可以是输入可以是输入/输出设备,例如打印机、键盘和显示器;资输出设备,例如打印机、键盘和显示器;资源也可以是一个变量、一个结构或一个数组等。源也可以是一个变量、一个结构或一个数组等。共享资源就是指可以被一个以上任务使用的资源。为共享资源就是指可以被一个以上任务使用的资源。为防止数据被破

8、坏,每个任务在与共享资源打交道时,必须防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫独占该资源,这叫互斥互斥。10.1.5 10.1.5 资源与共享资源资源与共享资源第7页,共47页。任务,也称为线程,是一个简单的程序。一般地,每个任务,也称为线程,是一个简单的程序。一般地,每个任务都是一个无限的循环。任务都是一个无限的循环。任务有五种状态:休眠态、就绪态、运行态、挂起态任务有五种状态:休眠态、就绪态、运行态、挂起态(等待某一事件发生)和被中断态。任何时刻,一个任务都(等待某一事件发生)和被中断态。任何时刻,一个任务都处于这五种状态之一的状态下。处于这五种状态之一的状态下。

9、休眠态休眠态相当于该任务驻留在内存中,但并不被多任务内相当于该任务驻留在内存中,但并不被多任务内核所调度。核所调度。就绪态就绪态意味着该任务已经准备好,可以运行了,意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂但由于该任务的优先级比正在运行的任务的优先级低,还暂不能运行不能运行。运行态运行态的任务是指该任务掌握了的任务是指该任务掌握了CPUCPU的控制权,的控制权,正在运行。正在运行。挂起态挂起态指该任务在等待,等待某一事件的发生。指该任务在等待,等待某一事件的发生。被中断状态被中断状态是指,发生中断时,是指,发生中断时,CPUCPU提供相应的中断服务

10、,提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。原来正在运行的任务暂不能运行,就进入了被中断状态。10.1.6 10.1.6 任务任务第8页,共47页。10.1.7 10.1.7 内核与任务切换内核与任务切换内核内核 内核是操作系统最基本的部分。多任务系统中,内核内核是操作系统最基本的部分。多任务系统中,内核负责管理各个任务,或者说为每个任务分配负责管理各个任务,或者说为每个任务分配CPUCPU时间,并且时间,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核决定一个程序在什么时候对某部分硬件操作多长时间。内核负责任务之间的通信,它提供的基本服务是任务切换。内

11、核负责任务之间的通信,它提供的基本服务是任务切换。任务切换任务切换 当多任务内核决定运行另外的任务时,保存正在运行当多任务内核决定运行另外的任务时,保存正在运行任务的当前状态,即保存任务的当前状态,即保存CPUCPU寄存器中的全部内容。这些内寄存器中的全部内容。这些内容保存在任务的当前状态保存区,也就是任务自己的栈区容保存在任务的当前状态保存区,也就是任务自己的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入当前状态从任务的栈中重新装入CPUCPU的寄存器,并开始下一的寄存器,并开始下一个任务的运行。这个过程就

12、称为任务切换。个任务的运行。这个过程就称为任务切换。第9页,共47页。多任务切换示意图多任务切换示意图第10页,共47页。调度是内核的主要职责之一,调度就是决定该轮到调度是内核的主要职责之一,调度就是决定该轮到哪个任务运行了。任务的调度方式有基于时间片轮转的哪个任务运行了。任务的调度方式有基于时间片轮转的调度和基于优先级的调度。多数实时系统是基于优先级调度和基于优先级的调度。多数实时系统是基于优先级调度法的。基于优先级的调度法指调度法的。基于优先级的调度法指CPUCPU总是让处于就绪总是让处于就绪态的优先级最高的任务先运行。至于何时让高优先级任态的优先级最高的任务先运行。至于何时让高优先级任务

13、掌握务掌握CPUCPU的使用权,有两种不同的情况。的使用权,有两种不同的情况。占先式调度;非占先式调度。占先式调度;非占先式调度。10.1.8 10.1.8 调度调度第11页,共47页。占先式调度占先式调度 任何时候具有最高优先级且已就绪的任务先执行。一任何时候具有最高优先级且已就绪的任务先执行。一个正在执行的任务放弃处理器的条件为:自愿放弃处理器个正在执行的任务放弃处理器的条件为:自愿放弃处理器(等待资源或执行完毕);有高优先级任务启动,该高优(等待资源或执行完毕);有高优先级任务启动,该高优先级任务将抢占其执行。当一个运行着的任务使一个比它先级任务将抢占其执行。当一个运行着的任务使一个比它

14、优先级更高的任务进入了就绪状态时,当前任务的优先级更高的任务进入了就绪状态时,当前任务的CPUCPU使使用权就被剥夺了,或者说被挂起了,那个高优先级的任务用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了立刻得到了CPUCPU的控制权。如果是中断服务子程序是一个的控制权。如果是中断服务子程序是一个高优先级的任务进入了就绪态,则中断完成时,中断了的高优先级的任务进入了就绪态,则中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。任务被挂起,优先级高的那个任务开始运行。占先式调度的优点是实时性好、反应快,调度算法相占先式调度的优点是实时性好、反应快,调度算法相对简单,可优先保证高

15、优先级任务的时间约束,其缺点是对简单,可优先保证高优先级任务的时间约束,其缺点是上下文切换多上下文切换多。第12页,共47页。非占先式调度非占先式调度 非占先式调度要求每个任务自我放弃非占先式调度要求每个任务自我放弃CPUCPU的所有权。的所有权。这种方式下,异步事件还是由中断服务来处理。中断服务这种方式下,异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态,但可以使一个高优先级的任务由挂起状态变为就绪状态,但中断服务以后控制权还是回到原来被中断了的那个任务,中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃直到该任务主动放弃CPUCPU的使

16、用权时,那个高优先级的任的使用权时,那个高优先级的任务才能获得务才能获得CPUCPU的使用权。的使用权。非占先式调度的优点是上下文切换少,几乎不需要使非占先式调度的优点是上下文切换少,几乎不需要使用信号量保护共享数据;缺点是处理器有效资源利用率低,用信号量保护共享数据;缺点是处理器有效资源利用率低,任务级响应时间不确定,可调度性不好。任务级响应时间不确定,可调度性不好。第13页,共47页。10.1.9 10.1.9 函数的可重入性函数的可重入性 可重入可重入(Reentrant)(Reentrant)型函数:是指可以被多个任务并发使用,型函数:是指可以被多个任务并发使用,而数据不会遭到破坏的函

17、数。而数据不会遭到破坏的函数。可重入型函数特征:可重入型函数特征:只使用局部变量,变量保存在只使用局部变量,变量保存在CPUCPU寄存器或堆栈中,可寄存器或堆栈中,可以在任意时刻被中断,再重新恢复运行时,数据不会被以在任意时刻被中断,再重新恢复运行时,数据不会被破坏;破坏;若使用全局变量,则需满足互斥条件。若使用全局变量,则需满足互斥条件。第14页,共47页。可重入型函数实例可重入型函数实例void func1(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;不可重入型函数清单不可重入型函数清单static int temp;void func2(int*

18、x,int*y)temp=*x;*x=*y;*y=temp;第15页,共47页。不可重入型函数运行示意图不可重入型函数运行示意图 使用以下技术之一可使函数使用以下技术之一可使函数func2()func2()具有可重入性:具有可重入性:(1)(1)将将temptemp定义为局部变量;定义为局部变量;(2)(2)在调用前,禁止中断,执行完毕后再开中断;在调用前,禁止中断,执行完毕后再开中断;(3)(3)在调用过程中,应用信号量独占使用该函数。在调用过程中,应用信号量独占使用该函数。第16页,共47页。10.1.10 10.1.10 信号量信号量 信号量信号量 信号与信号量在英文中都是同一个词Sem

19、aphore,并不加以区别。是一种通信机制。主要用来实现任务间同步以及标识某类资源的可用个数。两种类型:两种类型:只取0和1两个值的二值(Binary)信号量,这种信号量也称为信号;由若干位组合而成的计数式(Counting)信号量,一般有8位、16位或者32位等若干种,具体是多少位取决于内核。作用:作用:满足互斥条件,实现共享资源的独占使用;标志某事件的发生;使两个任务的行为同步。第17页,共47页。(1)初始化信号量,也可称为建立初始化信号量,也可称为建立(CREATE)(CREATE)信号量信号量。信号量初始化时,要给信号量赋初值,等待信号量的任务列表应清空。(2)等信号或申请信号量,可

20、称做挂起等信号或申请信号量,可称做挂起(PEND)(PEND)。对于执行等待信号量的任务来说,若该信号量有效,则信号量值减1,任务继续执行;若信号量值为0,则任务继续被挂起。若内核允许定义等待超时,则超时后,该任务转入就绪,同时返回错误代码以示发生了超时错误。(3)给信号,可称做发信号给信号,可称做发信号(POST)(POST)。若没有任务等待该信号量,则信号量的值仅简单加1;若只有一个任务等待该信号量,则该任务转入就绪状态,信号量的值不加1;若有多个任务等待信号量,至于谁先得到信号量,那就要看内核是如何调度的了。一般有两种可能:一是按优先级原则,等待信号量的任务中优先级最高的先得到;二是按先

21、进先出的原则,最早开始等待信号量的那个任务先得到。工作原理工作原理第18页,共47页。所谓死锁,是指各并发任务彼此等待对方所拥有的资源,所谓死锁,是指各并发任务彼此等待对方所拥有的资源,且这些并发任务在得到对方的资源之前不会释放自己所拥有且这些并发任务在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各的资源,从而造成大家都想得到资源而又都得不到资源,各并发任务不能继续向前推进的状态。并发任务不能继续向前推进的状态。最简单的防止死锁发生的方法有两种:最简单的防止死锁发生的方法有两种:1.1.让每个任务先得到全部需要的资源,再进行下一步工作。让每个任务先得到

22、全部需要的资源,再进行下一步工作。2.2.让每个任务用同样的顺序去申请多个资源,释放资源时使让每个任务用同样的顺序去申请多个资源,释放资源时使用相反的顺序。用相反的顺序。10.1.11 10.1.11 死锁死锁第19页,共47页。10.1.12 10.1.12 消息队列消息队列 消息用于两个任务之间的通信,消息队列是保存消息消息用于两个任务之间的通信,消息队列是保存消息的容器。通过内核提供的服务,任务或中断服务子程序可的容器。通过内核提供的服务,任务或中断服务子程序可以将一个消息放入消息队列。同样,一个或多个任务可以以将一个消息放入消息队列。同样,一个或多个任务可以通过内核服务从消息队列中得到

23、消息。通过内核服务从消息队列中得到消息。通常,先进入消息队列的消息先给任务,遵循先进先通常,先进入消息队列的消息先给任务,遵循先进先出原则(出原则(FIFOFIFO)。)。内核提供的典型消息队列服务如下:内核提供的典型消息队列服务如下:1.1.消息队列初始化,队列初始化时总是清为空;消息队列初始化,队列初始化时总是清为空;2.2.放一则消息到队列中去(放一则消息到队列中去(POSTPOST););3.3.等待一则消息的到来(等待一则消息的到来(PENDPEND););4.4.无等待取得消息。如果队列中有消息则任务可以取得消无等待取得消息。如果队列中有消息则任务可以取得消息,消息从队列中取走;但

24、如果此时队列为空,则内核不息,消息从队列中取走;但如果此时队列为空,则内核不将该任务挂起,只是用特别的返回代码通知调用者,队列将该任务挂起,只是用特别的返回代码通知调用者,队列中没有消息。中没有消息。第20页,共47页。中断是指计算机在执行程序的过程中,当出现异常情中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回到以下些异常情况或特殊请求的处理,处理结束后再返回到以下部分:部分:1.1.在前后台系统中,程序回到后台程序;在前后台系统中,程序回到后台程序;

25、2.2.对非占先式内核而言,程序回到被中断了的任务;对非占先式内核而言,程序回到被中断了的任务;3.3.对占先式内核而言,让进入就绪态的优先级最高的任务对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。开始运行。10.1.13 10.1.13 中断中断第21页,共47页。时钟节拍是特定的周期性中断。这个中断可以看作时钟节拍是特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断之间的时间间隔取决于不同应是系统心脏的脉动。中断之间的时间间隔取决于不同应用,是机器周期的一个整数倍,一般为用,是机器周期的一个整数倍,一般为1010200ms200ms,视,视系统的复杂性和对实时性的要求而定

26、。内核对系统的复杂性和对实时性的要求而定。内核对任务的切任务的切换和延时换和延时等操作都是基于时钟节拍的。时钟节拍的频率等操作都是基于时钟节拍的。时钟节拍的频率越快,系统的额外开销就越大。越快,系统的额外开销就越大。10.1.14 10.1.14 时钟节拍时钟节拍第22页,共47页。RTX51 RTX51是一款小巧的针对基于是一款小巧的针对基于80518051系列嵌入式系统的多任务系列嵌入式系统的多任务实时操作系统。它的使用可以简化比较复杂、有严格时间限制实时操作系统。它的使用可以简化比较复杂、有严格时间限制的软件的设计过程。的软件的设计过程。RTX51RTX51主要有两个不同的可用版本:主要

27、有两个不同的可用版本:RTX5lFullRTX5lFull标准版标准版,既可以以循环(,既可以以循环(Round Round 一一Robin Robin)方式)方式执行任务,也可以按执行任务,也可以按4 4级任务优先级的方式切换不同优先级的任级任务优先级的方式切换不同优先级的任务。务。标准版以并行方式工作,支持中断管理,信号和消息可以标准版以并行方式工作,支持中断管理,信号和消息可以通过邮箱系统在不同任务之间传递。通过邮箱系统在不同任务之间传递。RTX5lTinyRTX5lTiny精简版精简版,是其标准版的一个子集。它可以很容易地,是其标准版的一个子集。它可以很容易地运行在运行在8051805

28、1的单芯片系统而不需要任何外部数据存储器。通用性强,的单芯片系统而不需要任何外部数据存储器。通用性强,系统需求低,但功能上受到限制。系统需求低,但功能上受到限制。它只支持循环方式和信号方式的它只支持循环方式和信号方式的任务切换,而不支持优先级方式的任务切换。任务切换,而不支持优先级方式的任务切换。KEIL CKEIL C中自带了中自带了RTX5lTinyRTX5lTiny,以下只讲解,以下只讲解RTX5lTinyRTX5lTiny的内容,出现的内容,出现RTX51RTX51的地方默认为其精简版的地方默认为其精简版RTX51TinyRTX51Tiny。10.2 RTX51 10.2 RTX51

29、系统特点系统特点第23页,共47页。RTX51 RTX51 可以在所有的可以在所有的8051 8051 系列芯片上运行。用户只需要用标系列芯片上运行。用户只需要用标准的准的C C语言编写语言编写RTX51 RTX51 程序,然后用程序,然后用C51C51编译器编译即可生成代码。编译器编译即可生成代码。RTX51 RTX51 程序设计需要包含实时运行头文件和必要的库文程序设计需要包含实时运行头文件和必要的库文件,并且要用件,并且要用BL51 BL51 连接定位器来实现连接。连接定位器来实现连接。在在KeilKeil中,你只需要在目标选项的中,你只需要在目标选项的TargetTarget标签中的标

30、签中的OperatingOperating中中选择选择RTX-51 TinyRTX-51 Tiny,在你的头文件中加上,在你的头文件中加上#include#include 即可。即可。第24页,共47页。在在RTX51 TINYRTX51 TINY环境下生成代码,需要用到下列工具:环境下生成代码,需要用到下列工具:C51C51编译器编译器BL51BL51连接连接/定位器定位器A51A51宏汇编器宏汇编器 此外,库文件此外,库文件RTX51TNY.LIBRTX51TNY.LIB必须存放在环境变量必须存放在环境变量C51LIBC51LIB所指定所指定的路径下。的路径下。RTX51 TinyRTX5

31、1 Tiny版可以运行在版可以运行在80518051的单芯片嵌入式系统上,的单芯片嵌入式系统上,且不需要任何外部数据存储器,但也不排斥应用程序访问外且不需要任何外部数据存储器,但也不排斥应用程序访问外部的数据存储器。部的数据存储器。RTX51 TinyRTX51 Tiny版本可以使用版本可以使用C51C51所支持的所所支持的所有存储模式。所使用的存储模式只影响应用对象的存储位置。有存储模式。所使用的存储模式只影响应用对象的存储位置。RTX51 TinyRTX51 Tiny的系统变量和应用程序的堆栈区总是存储在的系统变量和应用程序的堆栈区总是存储在80518051的片内的片内RAMRAM中(即中

32、(即DATADATA和和IDATAIDATA)。)。典型的典型的RTX51 TinyRTX51 Tiny应用程序应用程序一般运行于一般运行于SMALLSMALL存储模式下。存储模式下。第25页,共47页。RTX51 TinyRTX51 Tiny版本使用了版本使用了80518051的定时器的定时器0 0和定时器和定时器0 0的中断的中断信号。信号。SFRSFR中的全局中断允许位或定时器中的全局中断允许位或定时器0 0中断屏蔽位都可能中断屏蔽位都可能使使RTX51 TinyRTX51 Tiny停止运行。因此,除非有特殊的应用目的,应停止运行。因此,除非有特殊的应用目的,应该使定时器该使定时器0 0

33、的中断始终开启,以保证的中断始终开启,以保证RTX51 TinyRTX51 Tiny的正常运的正常运行。行。实时操作系统的性能参数对嵌入式系统的应用开发也有着实时操作系统的性能参数对嵌入式系统的应用开发也有着直接影响,直接影响,RTX51RTX51的性能参数如下表所示。的性能参数如下表所示。描述描述RTX51 TINY 版本任务数任务数16RAM 需求需求7 Byte data,3(任务数)Byte idata代码要求代码要求900 Byte硬件要求硬件要求定时器0系统时钟系统时钟10065535周期中断响应时间中断响应时间20周期任务切换时间任务切换时间100700周期依赖于堆栈装载第26页

34、,共47页。10.3 RTX51 10.3 RTX51 的程序结构的程序结构 RTX51Tiny RTX51Tiny通过循环(通过循环(Round-RobinRound-Robin)方式来实现多任务,)方式来实现多任务,以达到多个无限循环或任务的准并行执行。这里的多任务并不以达到多个无限循环或任务的准并行执行。这里的多任务并不是真正同时执行的,而是使用不同的时间片来执行,即只是宏是真正同时执行的,而是使用不同的时间片来执行,即只是宏观上的同时执行。它将可用的观上的同时执行。它将可用的CPUCPU周期分成多个时间片,由周期分成多个时间片,由RTX51RTX51把这些时间片分配给每一个任务使用。每

35、个任务只能在预把这些时间片分配给每一个任务使用。每个任务只能在预定的时间片里运行。然后,定的时间片里运行。然后,RTX51RTX51再切换到另一个己经准备就绪再切换到另一个己经准备就绪的任务,让它再执行一定的时间片。的任务,让它再执行一定的时间片。时间片一般是比较短促的,一个时间片大约只有毫秒级时间。时间片一般是比较短促的,一个时间片大约只有毫秒级时间。正是由于这个原因,在用户看来,多个任务似乎是在同时执行的。正是由于这个原因,在用户看来,多个任务似乎是在同时执行的。第27页,共47页。RTX51 RTX51 利用了一个由利用了一个由80518051定时器中断信号驱动的定时程定时器中断信号驱动

36、的定时程序来实现控制。定时器产生的周期性中断信号用来驱动序来实现控制。定时器产生的周期性中断信号用来驱动RTX51RTX51的定时节拍。的定时节拍。RTX51RTX51与用户程序中的与用户程序中的mainmain函数是无关的。用户程序中即使没有函数是无关的。用户程序中即使没有main main 程序,程序,操作系统也会自动从设定的任务操作系统也会自动从设定的任务0 0开始执行开始执行。如果用。如果用户程序中已经有了户程序中已经有了main main 函数,就必须用人工方式来启动函数,就必须用人工方式来启动RTX51RTX51。这。这对于对于RTX51 TinyRTX51 Tiny版,可以调用版

37、,可以调用os_create_taskos_create_task函数来完成函数来完成.例:例:使用使用RTX51RTX51的的Round-RobinRound-Robin任务方式实现两个任务的调度执行。任务方式实现两个任务的调度执行。程序中的两个任务都是简单的计数循环。程序中的两个任务都是简单的计数循环。第28页,共47页。#include int counter0;int counter1;void job0(void)_task_ 0os_create_task(1);/*任务任务l 己准备就绪己准备就绪*/while(1)/*无限循环无限循环*/counter0+;/*更新计数值更新计

38、数值counter0*/void job1(void)_task_ 1while(1)/*无限循环无限循环*/counter1+;/*更新计数值更新计数值counter1*/第29页,共47页。10.4 RTX5110.4 RTX51的功能函数的功能函数 RTX51 RTX51精简版支持的功能函数表精简版支持的功能函数表 函数函数描述描述执行周期数执行周期数os_create_task将任务移入执行队列302os_delete_task执行队列中移去某任务172os_send_signal发送一信号到某任务(从某任务调用)408(任务切换)316(快速任务切换)71(不含任务切换)os_cle

39、ar_signal删除一发送信号57isr_send_signal发送一信号到某任务(从中断调用)46os_running_task_id返回当前执行的任务号os_wait等待某事件68(对未就绪信号)160(对未就绪消息)os_wait1等待某事件os_wait2等待某事件第30页,共47页。10.4.1 10.4.1 信号控制函数信号控制函数 isr_send_signal函数原型函数原型 char isr_send_signal(unsigned char task_id);功能说明功能说明 发送一个信号到发送一个信号到task_idtask_id说明的任务。如果此任务已说明的任务。如果

40、此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号将存储在此任务的信号标志中。此函数只能从中断否则,信号将存储在此任务的信号标志中。此函数只能从中断函数中调用。函数中调用。返返 回回 值值 如果执行成功,此函数返回如果执行成功,此函数返回0 0值;如果所指定的任值;如果所指定的任务不存在,则返回务不存在,则返回-1-1。第31页,共47页。os_clear_signal函数原型函数原型 char os_clear_signal(unsigned char task_id);功能说明功能说明 清除由清除由task_idt

41、ask_id说明的任务的信号说明的任务的信号返返 回回 值值 如果信号清除成功,此函数返回如果信号清除成功,此函数返回0 0值;如果所指定的任务值;如果所指定的任务不存在,则返回不存在,则返回-1-1 os_send_signal函数原型函数原型 char os_send_signal(unsigned char task_id);功能说明功能说明 发送一个信号到发送一个信号到task_idtask_id说明的任务。如果此任务已在等说明的任务。如果此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号将存储在此任务的信

42、号标志中。此函数只能在任务函数中调用号将存储在此任务的信号标志中。此函数只能在任务函数中调用返返 回回 值值 如果执行成功,此函数返回如果执行成功,此函数返回0 0值;如果所指定的任务值;如果所指定的任务不存在,则返回不存在,则返回-1-1 第32页,共47页。10.4.2 10.4.2 任务控制函数任务控制函数 os_create_task函数原型函数原型 char os_create_task(unsigned char task_id);功能说明功能说明 启动已定义的由启动已定义的由task_idtask_id说明的任务。此任务根据说明的任务。此任务根据RTX51RTX51运行规则,标记

43、为就绪,并准备执行。运行规则,标记为就绪,并准备执行。返返 回回 值值 如果任务成功启动,此函数返回如果任务成功启动,此函数返回0 0值;如果没有值;如果没有task_idtask_id说明的任务,则返回说明的任务,则返回-1-1 第33页,共47页。os_delete_task函数原型函数原型 char os_delete_task(unsigned char task_id);功能说明功能说明 停止停止task_idtask_id说明的任务,此任务将从任务表中删除。说明的任务,此任务将从任务表中删除。返返 回回 值值 如果任务成功启动,此函数返回如果任务成功启动,此函数返回0 0值;如果没

44、有值;如果没有task_idtask_id说明的任务,则返回说明的任务,则返回-1-1。os_running_task_id函数原型函数原型 char os_running_task_id(unsigned char task_id);功能说明功能说明 判断当前执行任务的编号判断当前执行任务的编号返返 回回 值值 返回当前正在执行的任务的编号,返回值为返回当前正在执行的任务的编号,返回值为0 01515。第34页,共47页。10.4.3 10.4.3 延时控制函数延时控制函数 os_wait函数原型函数原型 char os_wait(unsigned char event_sel,/*将要等待

45、的事件*/unsigned char tisks,/*将要等待的定时器时标数*/unsigned char dummy);/*未用参数*/功能说明功能说明 停止当前执行的任务,并等待一个或多个事件,如时间间隔、超停止当前执行的任务,并等待一个或多个事件,如时间间隔、超时、从另一个任务或中断发出的信号等。参数时、从另一个任务或中断发出的信号等。参数event_selevent_sel说明所等待的一说明所等待的一个事件或几个事件的组合。事件种类如下表所示。个事件或几个事件的组合。事件种类如下表所示。事件事件描述描述K_IVL定时器溢出K_SIG收到信号K_TMO时间片超时RTX51RTX51的事件

46、类别的事件类别第35页,共47页。os_waitos_wait函数的返回值表函数的返回值表 os_wait1 函数原型函数原型 char os_wait1(unsigned char event_sel);功能说明功能说明 暂停当前任务,等待一个事件的发生。它是暂停当前任务,等待一个事件的发生。它是os_waitos_wait函数的一个子集,不接受针对函数的一个子集,不接受针对os_waitos_wait函数提供的函数提供的全部事件。参数全部事件。参数event_selevent_sel指定了等待的事件,它只能是指定了等待的事件,它只能是K_SIGK_SIG。返返 回回 值值 当信号事件发生时

47、,任务就被允许执行,任务的当信号事件发生时,任务就被允许执行,任务的执行将恢复。返回用于识别事件、使任务重新启动的常量。执行将恢复。返回用于识别事件、使任务重新启动的常量。返回值返回值描述描述SIG_EVENT信号被接收TMO_EVENT发生超时或事件间隔已过NOT_OKevent_sel的值非法第36页,共47页。os_wait2函数原型函数原型 char os_wait2(unsigned char event_sel,/*将要等待的事件将要等待的事件*/unsigned char tisks);/*将要等待的定时器时标数将要等待的定时器时标数*/功能说明功能说明 与与os_waitos_

48、wait相同,但是不需要相同,但是不需要dummydummy参数。参数。返返 回回 值值 与与os_waitos_wait相同相同 第37页,共47页。10.5 RTX5110.5 RTX51的任务调度的任务调度 RTX51RTX51利用任务状态来管理各个任务。用户为利用任务状态来管理各个任务。用户为RTX51RTX51定义的定义的每个任务都会以各种状态的某一种来运行。每个任务都会以各种状态的某一种来运行。RTX51RTX51内核为每个内核为每个任务保留了适当的状态如下表所示。任务保留了适当的状态如下表所示。RTX51RTX51的任务状态表的任务状态表 状态状态描述描述Running运行状态当

49、前正在执行的任务,在任一时刻只能有一个任务处于运行状态Ready就绪状态等待执行的任务,当前任务执行完后,接着执行就绪状态任务Waiting等待状态等待某一事件的任务,如事件发生,任务进入就绪状态Deleted删除状态没有启动的任务Time-out超时状态与就绪状态相似,放在round-robin中尚未执行的任务第38页,共47页。RTX51 RTX51以以round-robinround-robin多任务方式执行程序,它支持多个无限循环或多任务方式执行程序,它支持多个无限循环或任务的任务的准并行执行准并行执行。任务不是被同时执行,而是以。任务不是被同时执行,而是以分时的方式轮分时的方式轮片执

50、行片执行。可用的。可用的CPUCPU时钟周期被分成多个时间片,然后由时钟周期被分成多个时间片,然后由RTX51 RTX51 将这些时间片分配给各个任务。每个任务只允许在预定的时间将这些时间片分配给各个任务。每个任务只允许在预定的时间片中执行,时间片用完时,片中执行,时间片用完时,RTX51RTX51就切换至另一个就绪的任务,就切换至另一个就绪的任务,继续执行一段时间。时间片的具体长度可以用配置函数继续执行一段时间。时间片的具体长度可以用配置函数TIMESHARING来定义。来定义。如果遇到因为一个任务处于等待并且占用了时间片而暂时无如果遇到因为一个任务处于等待并且占用了时间片而暂时无法往下执行

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(RTX51实时操作系统课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|