嵌入式实时操作系统.pptx

上传人:夺命阿水 文档编号:373887 上传时间:2023-04-28 格式:PPTX 页数:36 大小:427.33KB
返回 下载 相关 举报
嵌入式实时操作系统.pptx_第1页
第1页 / 共36页
嵌入式实时操作系统.pptx_第2页
第2页 / 共36页
嵌入式实时操作系统.pptx_第3页
第3页 / 共36页
嵌入式实时操作系统.pptx_第4页
第4页 / 共36页
嵌入式实时操作系统.pptx_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《嵌入式实时操作系统.pptx》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统.pptx(36页珍藏版)》请在课桌文档上搜索。

1、嵌入式实时操作系统,多任务实时操作系统,前后台系统,前后台系统的组成:前台和后台程序后台:是一个无限循环的应用程序,循环中调用相应的任务函数完成相应的操作,各个任务依次运行,没有调度,运行的次序不能改变。前台:是中断服务程序,处理异步事件。,适用情形,一般不复杂或实时性要求不高的小系统很适合采用前后台系统,例如微波炉、电话机、玩具等。在另外一些基于省电的应用中,由于平时微处理器处在停机状态,所有的事都靠中断服务来完成,因此也常常采用前后台系统模式。,操作系统,操作系统(Operating System,简称OS)是计算机中最基本的程序。操作系统负责计算机系统中全部软、硬资源的分配以及回收、控制

2、与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。操作系统的主要包括四大功能:处理机管理:解决CPU的分时复用。存储管理:配合CPU调度内存。设备管理:分配外设的使用,包括独享、共享和虚拟。软件资源管理:解决程序和信息的存取和管理等问题。,实时操作系统,实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。,多任务实时操作系统,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个

3、任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度和异常处理等工作。多任务实时操作系统,以分时方式运行多个任务,看上去好像是多个任务“同时”运行。任务之间的切换应当以优先级为根据,只有具有优先服务方式的RTOS才是真正的实时操作系统,而时间分片方式和协作方式的RTOS并不是真正的“实时”。,相关基本概念,资源与共享资源,程序运行时可使用的软、硬件环境统称为资源。资源可以是输入/输出设备,例如打印机、键盘和显示器;资源也可以是一个变量、一个结构或一个数组等。共享资源就是指可以被一个以上任务使用的资源。为防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫互斥。,任务

4、,任务,也称为线程,是一个程序。一般地,每个任务都是一个无限的循环。任务有五种状态,任何时刻,一个任务都处于这五种状态之一的状态下。休眠态相当于该任务驻留在内存中,但并不被多任务内核所调度。就绪态意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂不能运行。运行态的任务是指该任务掌握了CPU的控制权,正在运行。挂起态指该任务在等待,等待某一事件的发生。被中断状态是指,发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。,内核与任务切换,内核是操作系统最基本的部分。负责管理各个任务,为每个任务分配资源,它提供的基本服务是任务

5、切换。任务切换当多任务内核决定运行另外的任务时,保存正在运行任务的当前状态,即保存CPU寄存器中的全部内容。这些内容保存在任务的当前状态保存区,也就是任务自己的栈区之中。入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行。这个过程就称为任务切换。,中断,中断是最基本的任务切换方式,停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回到以下部分:1.在前后台系统中,程序回到后台程序;2.对非占先式内核而言,程序回到被中断了的任务;3.对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。,调度,任务的调度方式有基

6、于时间片轮转的调度和基于优先级的调度。多数实时系统是基于优先级调度法的。基于优先级的调度法指CPU总是让处于就绪态的优先级最高的任务先运行。至于何时让高优先级任务掌握CPU的使用权,有两种不同的情况:占先式调度任何时候具有最高优先级且已就绪的任务先执行。非占先式调度要求每个任务自我放弃CPU的所有权。,临界区,临界资源:任何时候都只允许一个任务访问的资源。临界区或临界段:用于访问临界资源的代码段。临界代码段不允许多个并发任务交叉执行,否则会产生严重后果,比如进入中断后的现场保护代码等。为确保临界区代码的安全执行,在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断,函数的可重入性,可重

7、入(Reentrant)型函数:是指可以被多个任务并发使用,而数据不会遭到破坏的函数。可重入型函数特征:只使用局部变量,变量保存在CPU寄存器或堆栈中,可以在任意时刻被中断,再重新恢复运行时,数据不会被破坏;若使用全局变量,则需满足互斥条件。,可重入型函数实例void func1(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;不可重入型函数清单static int temp;void func2(int*x,int*y)temp=*x;*x=*y;*y=temp;,死锁,所谓死锁,是指各并发任务彼此等待对方所拥有的资源,且这些并发任务在得到对方的资源之前

8、不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发任务不能继续向前推进的状态。最简单的防止死锁发生的方法有两种:1.让每个任务先得到全部需要的资源,再进行下一步工作。2.让每个任务用同样的顺序去申请多个资源,释放资源时使用相反的顺序。,消息队列和时钟节拍,消息队列是保存消息的容器。通过内核提供的服务,任务或中断服务子程序可以将消息放入消息队列。同样,任务可以通过内核服务从消息队列中得到消息。通常,先进入消息队列的消息先给任务,遵循先进先出原则(FIFO)。内核提供的典型消息队列服务如下:1.消息队列初始化,队列初始化时总是清为空;2.放一则消息到队列中去(POST);3

9、.等待一则消息的到来(PEND);4.无等待取得消息。,基于RTX51操作系统的软件设计,RTX51是Keil公司开发的专门针对于8051兼容MCU所作的多任务实时操作系统,是Keil自带的小操作系统之一。有二个不同的RTX51版本,RTX51 Full和RTX51 TinyRTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器。该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程序没有main()函数,是从任务0开始执行的,也不支持抢先任务切换和任务优先级。RTX51 Tiny的程序用标准的C语言构造,由Keil C51 C编译器编译。用户可以很

10、容易的定义任务函数,而不需要进行复杂的栈和变量结构配置,只需包含一个指定的头文件(rtx51tny.h)。RTX51 Tiny使用定时器0、定时器0中断,和寄存器组1。,单任务和伪多任务,voidmain(void)while(1)do_something();/一直循环执行do_something任务,voidmain(void)while(1)key_scan();/键盘扫描do_key();/处理按键事件ctr_adj();/调整控制器,RTX51 Tiny的多任务(程序结构),voidjob0(void)_task_0os_create_task(1);/创建任务1os_create_

11、task(2);/创建任务2os_create_task(3);/创建任务3os_delete_task(0);/删除任务0voidjob1(void)_task_1/键盘扫描任务while(1)key_scan();,voidjob2(void)_task_2/处理按键事件任务while(1)do_key();voidjob3(void)_task_3/调整控制器任务while(1)ctr_adj();,RTX51的任务调度,RTX51利用任务状态来管理各个任务。用户为RTX51定义的每个任务都会以各种状态的某一种来运行。RTX51内核为每个任务保留了适当的状态如下表所示。RTX51的任务状

12、态表,RTX51的任务调度,RTX51支持多个任务的准并行执行。任务不是被同时执行,而是以分时的方式轮片执行。可用的CPU时间被分成多个时间片,然后由RTX51 将这些时间片分配给各个任务。每个任务只允许在预定的时间片中执行,时间片用完时,RTX51就切换至另一个就绪的任务,继续执行一段时间。时间片的具体长度可以用配置函数TIMESHARING来定义。如果遇到因为一个任务处于等待并且占用了时间片而暂时无法往下执行,可以调用系统函数os_wait来通知RTX51,以便将当前的任务挂起而提前执行另一任务。,RTX51的任务调度,RTX51中处理任务分配的模块称为调度程序(Scheduler)。调度

13、程序驱动哪个任务运行是按照以下的规则进行的:(1)如果发生以下情况时,当前运行的任务将被中断:调用os_wait函数,而所等待的事件未来到;任务的执行时间已经超过所定义的Round-Robin循环时间间隔(2)如果发生以下情况时,另一个任务将被启动:已没有正在执行的任务;将要执行的任务处在就绪状态或超时状态。,RTX51系统的配置,编写RTX51程序需要包含RTX51TNY.H 文件。在程序中,需要用一个关键字“_task_”来声明一个函数的任务属性。RTX51程序不需要main 函数。在进行连接处理时,会将启动任务0的执行所需要的代码连接进来,作为开始执行的代码。用户可以更改配置文件CONF

14、_TNY.A51中的以下几个参数:系统定时器中断所用的寄存器组 系统定时器的时间间隔 Round-Robin的超时(time-out)值 内部数据存储器的大小 RTX5l启动后的自由堆栈大小,RTX51系统的配置,RTX51的功能函数,RTX51的功能函数,isr_send_signal函数原型 char isr_send_signal(unsigned char task_id);功能说明 发送一个信号到task_id任务。如果此任务已在等待一个信号,那么调用函数将使此任务就绪,准备执行。否则,信号将存储在此任务的信号标志中。此函数只能从中断函数中调用。返 回 值 如果执行成功,此函数返回0

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

16、如果执行成功,此函数返回0值;如果所指定的任务不存在,则返回-1,RTX51的功能函数,os_create_task函数原型 char os_create_task(unsigned char task_id);功能说明 启动已定义的由task_id任务。此任务根据RTX51运行规则,标记为就绪,并准备执行。返 回 值 如果任务成功启动,此函数返回0值;如果没有task_id任务,则返回-1 os_delete_task函数原型 char os_delete_task(unsigned char task_id);功能说明 停止task_id任务,此任务将从任务表中删除。返 回 值 如果任务成

17、功启动,此函数返回0值;如果没有task_id任务,则返回-1。os_running_task_id函数原型 char os_running_task_id(unsigned char task_id);功能说明 判断当前执行任务的编号返 回 值 返回当前正在执行的任务的编号,返回值为015。,RTX51的功能函数,os_wait函数原型 char os_wait(unsigned char event_sel,unsigned char tisks,unsigned char dummy);/*将要等待的事件*/*将要等待的定时器时标数*/*未用参数*/功能说明 停止当前执行的任务,并等待一

18、个或多个事件,如时间间隔、超时、从另一个任务或中断发出的信号等。参数event_sel说明所等待的一个事件或几个事件的组合。事件种类及返回值如下表所示:os_wait函数的事件参数表 os_wait函数的返回值表,RTX51的功能函数,os_wait1 函数原型 char os_wait1(unsigned char event_sel);功能说明 暂停当前任务,等待一个事件的发生。它是os_wait函数的一个子集,不接受针对os_wait函数提供的全部事件。参数event_sel指定了等待的事件,它只能是K_SIG。返 回 值 当信号事件发生时,任务就被允许执行,任务的执行将恢复。返回用于识

19、别事件、使任务重新启动的常量。os_wait2函数原型 char os_wait2(unsigned char event_sel,unsigned char tisks);/*将要等待的事件*/*将要等待的定时器时标数*/功能说明 与os_wait相同,但是不需要dummy参数。返 回 值 与os_wait相同,最好的学习资料,最好的学习资料是Keil 中自带的用户手册,RTX51的应用举例,下面的代码将要实现的功能是:使LED0每隔1秒切换一次状态(ON/OFF),LED1每0.7秒切换一次状态,LED2每0.4秒切换一次状态,LED3每0.2秒切换一次状态。,#include#inclu

20、de typedef unsigned char uchar;typedef unsigned int uint;sbit LED0=P20;sbit LED1=P21;sbit LED2=P22;sbit LED3=P23;sbit KEY0=P17;,void job0(void)_task_ 0 LED0=1;LED1=1;LED2=1;LED3=1;/关闭四个LED os_create_task(1);/创建任务1 os_create_task(2);/创建任务2 os_create_task(3);/创建任务3 os_create_task(4);/创建任务4 os_create_t

21、ask(5);/创建任务5 os_delete_task(0);/删除自己(task0),使task0退出任务链表,void job1(void)_task_ 1 while(1)LED0=!LED0;os_wait(K_TMO,100,0);/等待100个时钟周期 void job2(void)_task_ 2 while(1)LED1=!LED1;os_wait(K_TMO,70,0);/等待(延时)0.7s void job3(void)_task_ 3 while(1)LED2=!LED2;os_wait(K_TMO,40,0);/等待(延时)0.4s void job4(void)_

22、task_ 4 while(1)LED3=!LED3;os_wait(K_TMO,20,0);/等待(延时)0.2s,void job5(void)_task_ 5 while(1)if(0=KEY0)/判断按键是否按下 LED3=1;os_delete_task(4);/按键按下时关闭LED3,使task4退出任务链表,LED3不再闪烁,RTX51的应用举例,RTX51在单片机控制的GPS接收板上的应用(1)系统硬件组成单片机W77E58、快速8051内核、32KB ROM、1KB的XDATA RAM,符合使用RTX51的硬件要求;键盘、GPS定位模块、液晶显示模块。(2)系统软件构成软件运

23、行环境KEIL uVision2 6.20集成开发环境加上RTX51完全版。任务KEY-BOARD,监测键盘的情况,如果有按键按下,把按键的编码发送到邮箱1,外部中断1等待接收GPS数据,并把数据存储起来,向DISPLAY任务发出信号,进行处理。任务SEND_OUT,把接收到的数据进行处理,并发送出去。任务VOICE进行语音输出。,RTX51的应用举例,#include/包含RTX51文件#define DISPLAY 0#define SEND_OUT 1#define KEY_BOARD 2#define VOICE 3 void main(void)init_system();/系统初始

24、化 os_start_system(DISPLAY);/启动RTX51 viod task0(void)_task_DISPLAY os_set_slice(1000);/设置时间片大小 os_enable_isr(0);/允许外部中断0 os_creat_task(SEND_OUT);/启动SEND_OUT任务 os_creat_task(VOICE);/启动VOICE任务 os_creat_task(KEY_BOARD);/启动KEY_BOARD任务 for(;)switch(os_wait(K_SIG+K_MBX+1,255,/向任务VOICE发送信号,void task1(void)_

25、task_SEND_OUT/处理发送数据任务 while(1)os_wait(K_SIG,255,0);/等待信号 operation_send();void task2(void)_task_VOICE while(1)os_wait_signal(K_SIG,255,0);/等待语音处理信号 voice();void interrupt1(void)interrupt 2 using 1 read_gps_data(p_gps_data);/接收数据 isr_send_signal(DISPLAY);/向DISPLAY任务发信号 void task2(void)_task_KEYBOARD_priority_3/设置为快速任务 os_attach_interrupt(0);/绑定任务和外部中断0 while(1)os_wait(K_INT,255,0);/等待中断的发生 KEY=iic_read_keyboard();os_send_message(1,KEY,0);/将键盘编码发送到邮箱1,

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

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号