第九讲 嵌入式操作系统概述(6).ppt

上传人:叶*** 文档编号:83248175 上传时间:2023-03-29 格式:PPT 页数:155 大小:3.62MB
返回 下载 相关 举报
第九讲 嵌入式操作系统概述(6).ppt_第1页
第1页 / 共155页
第九讲 嵌入式操作系统概述(6).ppt_第2页
第2页 / 共155页
点击查看更多>>
资源描述

《第九讲 嵌入式操作系统概述(6).ppt》由会员分享,可在线阅读,更多相关《第九讲 嵌入式操作系统概述(6).ppt(155页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第九第九讲 嵌入式操作系嵌入式操作系统概述概述(6)No.2Sep 2006目目 录录嵌入式操作系统概念嵌入式操作系统的基本原理(uC/OS-II)p任务和调度p中断和时钟管理p任务同步和通信p动态内存管理No.3Sep 2006计算机操作系统(计算机操作系统(Operating SystemOperating System,OSOS)n 操作系统是一种为应用程序提供服务的系统软件,是一个完整计算机系统的有机组成部分。n 从层次来看,操作系统位于计算机硬件之上,应用软件之下。所以也把它叫做应用软件的运行平台。什么是计算机操作系统什么是计算机操作系统 简而言之,简而言之,OS 就是一个屏蔽层,屏

2、就是一个屏蔽层,屏蔽了计算机的具体硬件,向使用者提供蔽了计算机的具体硬件,向使用者提供了一台虚拟的计算机开发、使用环境。了一台虚拟的计算机开发、使用环境。No.4Sep 2006n 它在计算机应用程序与计算机硬件系统之间,屏蔽了计算机硬件工作的一些细节,并对系统中的资源进行有效的管理。n 通过提供函数(应用程序接口(API),从而使应用程序的设计人员得以在一个友好的平台上进行应用程序的设计和开发,大大地提高了应用程序的开发效率。计算机操作系统的作用计算机操作系统的作用从用户的角度来看,它就是一大堆函数(API 和系统函数),用户可以调用(普通调用或系统调用)它们来对系统资源进行操作。计算机硬件

3、用汇编语言编写的硬件抽象层高级语言的接口应用软件操作系统No.5Sep 2006操作系统计算机操作系统的功能计算机操作系统的功能处理器的管理存储管理网络和通信的管理I/O设备管理文件管理任务管理任务表存储分配表文件目录设备表总之,需要许多的表和数据结构No.6Sep 2006嵌入式软件的发展循环轮询系统嵌入式软件的发展循环轮询系统单线程程序单线程程序Single-threaded program 也称为顺序程序也称为顺序程序Sequential program,它分为两种:它分为两种:循环轮询系统循环轮询系统:(Polling Loop)最简单的软件结构是循环轮询最简单的软件结构是循环轮询p优

4、点优点:l便于实现便于实现l没有中断机制,程序运行良好不会出现随机的问题没有中断机制,程序运行良好不会出现随机的问题p缺点缺点:l有限的应用领域有限的应用领域)l对于大量的对于大量的I/O服务的应用不易实现服务的应用不易实现;DosomeworkCheckforminputRepeatinitialize()While(true)if(condition_1)action_1();if(condition_2)action_2();if(condition_n)acition_n();No.7Sep 2006嵌入式软件的发展前后台系统嵌入式软件的发展前后台系统单线程程序第二种:前后台系统单线程

5、程序第二种:前后台系统(Foreground/Background),(Super-Loops)。p应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成可以看成后台行为后台行为(background)。p中断服务程序处理外部中断服务程序处理外部I/O事件,这部分可以看成事件,这部分可以看成前台行为(前台行为(foreground)。p时间相关性很强的关键操作时间相关性很强的关键操作(Critical operation)靠中断服务来保证的。靠中断服务来保证的。很多基于微处理器的产品采用前后台系统设计,例

6、如微波炉、电话机、玩具等。极端情况下,后台只是一个简单的循环不做任何事情所有其它工作都是由中断处理程序完成的No.8Sep 2006嵌入式软件的发展嵌入式软件的发展多任务操作系统多任务操作系统问题的提出:对于一个复杂的嵌入式实时系统来说问题的提出:对于一个复杂的嵌入式实时系统来说p当采用中断处理程序加后台主程序难以完成时当采用中断处理程序加后台主程序难以完成时p存在一些互不相关的过程需要在一个计算机中同时处理时存在一些互不相关的过程需要在一个计算机中同时处理时,多任务运行很像前后台系统,多任务运行很像前后台系统,但后台任务有多个;但后台任务有多个;CPU在许多任务之间转换;在许多任务之间转换;

7、需要对这些共享的设备和数需要对这些共享的设备和数据进行管理据进行管理系统分成相对简单的相互合系统分成相对简单的相互合作的模块作的模块No.9Sep 2006嵌入式操作系统的特点嵌入式操作系统的特点n 必要性-嵌入式系统软硬件愈加庞大复杂。n 微型化、可裁减-软、硬件小而精,够用即可。n 实时性-抢占式管理策略,满足时间正确性。n 可靠性-无人值守、自动化设备的使用要求。n 易移植-便于应用到多种的硬件平台。n 微内核-完成OS主要功能的代码很小(附加功能需另挂)。No.10Sep 2006多任务嵌入式操作系统的任务多任务嵌入式操作系统的任务n 多任务管理-丰富的多任务管理函数供目标系统设计者容

8、易完成多任务应用设计。n任务管理和调度n任务同步和通信n中断和时钟n 内存管理-动态内存管理充分利用硬件资源。n 外设管理-例如I2C、UART、Timer、SPI等设备的驱动。No.11Sep 2006嵌入式RTOSuC/OS-II简介n uC/OS由 Jean J.Labrosse 先生(加拿大)1992 编写的RTOS,1999年改写后命名为 uC/OS-II。n 2000年被美航空管理局认证。n uC/OS-II中的代码 90%用C语言编写,时有少量的相关于硬件的代码用汇编编写,易移植到各类体系结构的8位、16位、32位处理器。n 官方网站:No.12Sep 2006No.13Sep

9、2006目目 录录嵌入式操作系统概念嵌入式操作系统的基本原理(uC/OS-II)p任务和调度p中断和时钟管理p任务同步和通信p动态内存管理No.14Sep 2006任务的基本概念任务的基本概念复杂问题复杂问题“分而治之分而治之”的问题解题思路。的问题解题思路。针对目标系统拆分后的针对目标系统拆分后的“小且易小且易”的问题的具的问题的具体处理方法编码和数据结构体处理方法编码和数据结构-任务。任务。uC/OS-II的两种任务:系统任务、用户任务。的两种任务:系统任务、用户任务。任务的组成:任务的组成:n任务控制块-uC/OS-II进行任务管理用的一个数据结构。n任务代码-描述任务算法的程序编码。n

10、任务堆栈-任务的工作现场环境。No.15Sep 2006任务的基本概念任务的基本概念No.16Sep 2006任务的基本概念任务的基本概念“宏观”上的多任务并发,实际上是用单CPU进行多任务处理,“微观”任何时刻,只能运行一个任务,存在CPU资源竞争-任务调度、任务现场。各个任务在多任务系统中也随着环境条件的情况而具有不同的状态。任务状态划分也是多任务操作系统的管理手段。n任务的5种状态:nSleep-仅有编码未激活。nReady-已激活并“万事俱备,只欠调度”nRunning-正占用CPU运行自己。nWait-等待某事件发生。nISR_Sta-Running状态的任务被中断后进入的状态。No

11、.17Sep 2006任务的状态及其转换正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态 系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态 一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态 No.18Sep 2006用户任务代码的一般结构用户任务代码的一般结构voidMyTask(voi

12、d*pdata)/任务的初始化for(;)/超循环构成任务体 可被中断的用户代码片断;OS_ENTER_CRITICAL();/进入临界区(关中断)不可被中断的用户代码片断;OS_EXIT_CRITICAL();/退出临界区(开中断)可被中断的用户代码片断;No.19Sep 2006用户应用程序的一般结构用户应用程序的一般结构n“用户任务”代码形式上很像C函数,但他不是函数!n“任务”不能被主函数main()或其他函数调用,只能被主函数或已激活任务创建。n任务的运行由操作系统调度管理。voidMyTask1(void*pdata)voidMyTask2(void*pdata)voidmain(

13、)OSInit();OSTaskCreate(MyTask1,);OSTaskCreate(MyTask2,);OSStart();No.20Sep 2006任务的基本概念任务的基本概念在此学习在此学习uC/OS-II 的的 3 个系统函数和个系统函数和 2个宏。个宏。nOSInit()-初始化uC/OS-II环境。nOSTaskCreate()-创建任务系统函数。nOSStart()-启动uC/OS-II任务调度器。nOS_ENTER_CRITICAL()-进入临界区(宏)nOS_EXIT_CRITICAL()-退出临界区(宏)nOSInit()函数原型:voidOSInit(void)nO

14、SStar()函数原型:voidOSStart(void)nOSTaskCreate()函数原型:INT8UOSTaskCreate(void(*task)(void*pd),/指向任务的指针void*pdata,/传递给任务的参数OS_STK*ptos,/任务堆栈栈顶的指针INT8Uprio/任务的优先级别)No.21Sep 2006OSTaskCreate()函数使用举例:定义任务task_Avoidtask_A(void*pdata);/任务初始化部分while(1);/任务功能代码在系统“创建”任务task_Avoidmain(void)OSInit();/系统初始化部分OSTaskC

15、reate(task_A,void*0,&MystackTop,8);OSStart();No.22Sep 2006任务的基本概念任务的基本概念系统任务系统任务n空闲任务(OSTaskIdel())n统计任务(OSTaskStat())原型:voidOSTaskIdel(void*pdata)原型:voidOSTaskStat(void*pdata)n空闲任务(OSTaskIdel())使用说明:1、uC/OS-II规定用户程序中必须使用OSTaskIdel。2、该任务不能用软件删除。3、该任务是uC/OS-II初始化时自动创建,其任务优先级固定为最低级,用户也可修改该任务的业务。4、目的-使

16、CPU在没有用户任务可执行时也有事可做。n统计任务(OSTaskStat())使用说明:1、功能完成用户任务CPU使用率的统计,结果以百分比的形式存放在变量OSCPUsage中。2、该任务用户可选择使用。OS_CFG.H文件中的常数OS_TASK_STAT_EN设置为1,使能该函数。3、用户在OS_CFG.H中使能该任务后,系统自动创建该任务,但在用户使用统计数据前必须调用系统函数OSStatInit()先进行初始化。4、该任务固定拥有次末任务优先级。No.23Sep 2006任务的基本概念任务的基本概念任务的优先权和优先级别任务的优先权和优先级别nuC/OS-II 的每个任务都必须有唯一的优

17、先级。nuC/OS-II 最多可以管理64个优先级别分配给64个任务。nuC/OS-II 中用一个8b的整型数来表示优先级别,数字越小,优先级越高,prio=0 的任务优先级最高。nuC/OS-II 中使用任务的优先级(prio)作为任务句柄。n用户通过修改 OS_CFG.H 中的宏定义常数 OS_LOWEST_PRIO 的值,约定本用户系统的最大优先级数。No.24Sep 2006任务堆栈任务堆栈堆栈堆栈-LIFO访问原则组织的连续存储器。访问原则组织的连续存储器。任务堆栈在任务堆栈在 uC/OS-II 中的应用:中的应用:n任务堆栈是任务的三大组成部分之一。n保存CPU寄存器现场(R0R1

18、2、LR、SPSR等)。n本Task的私有数据。No.25Sep 2006任务堆栈任务堆栈任务堆栈的创建任务堆栈的创建-在创建任务的同时,任务堆栈即被创建。举例:#defineMyTaskStkSize64OS_STKMyTaskStkMyTaskStkSize/在 OS_CPU.H中定义 OS_STK/typedef INT32U OS_STKINT8UOSTaskCreate(void(*task)(void*pd),/指向任务的指针void*pdata,/传递给任务的参数MyTaskStkMyTaskStkSize1/任务堆栈栈顶的指针INT8Uprio/任务的优先级别)No.26Sep

19、 2006任务堆栈任务堆栈任务堆栈的使用注意事项任务堆栈的使用注意事项 _ 存在两种堆栈形式存在两种堆栈形式n递增堆栈-进栈操作向大地址方向发展。n递减堆栈-进栈操作向小地址方向发展。OSTaskCreate(&MyTaskStkStkSize-1,)OSTaskCreate(&MyTaskStk0,)备注:利用条件编译技术和 OS_CPU.H 中的宏定义常数OS_STK_GROWTH 编写易移植用户系统;“1”-递减堆栈 for ARM CPU。No.27Sep 2006任务控制块及任务控制块链表任务控制块及任务控制块链表任务控制块(任务控制块(TCB)-任务在系统中的身份证任务在系统中的身

20、份证nTCB-uC/OS-II 中用于记录任务信息(任务堆栈指针、任务当前状态、任务优先级别等)的数据结构。nuC/OS-II 将系统中的所有 TCB 构成两个链表(OSTCBList、OSTCBFreeList)进行任务管理。u空任务控制块链表-未被分配的 TCB 链 OSTCBFreeList。u任务控制块链表-已分配的 TCB 链 OSTCBList。No.28Sep 2006任务控制块及任务控制块链表任务控制块及任务控制块链表任务控制块(任务控制块(TCB)的结构)的结构任务控制块结构的主要成员typedefstructos_tcbstructos_tcb*OSTCBNext;/指向下

21、一个TCB的指针structos_tcb*OSTCBPrev;/指向前一个TCB的指针OS_STK*OSTCBStkPtr;/指向任务堆栈栈顶的指针INT16UOSTCBDly;/任务等待时间INT8U OSTCBStat;/任务的当前状态标志INT8U OSTCBPrio;/任务的优先级别OS_TCB;No.29Sep 2006任务控制块及任务控制块链表任务控制块及任务控制块链表任务控制块链表任务控制块链表n空任务控制块链表(OSTCBFreeList)n任务控制块链表(OSTCBList)-uC/OS-II用两个链表来管理TCBNo.30Sep 2006任务控制块及任务控制块链表任务控制块

22、及任务控制块链表任务控制块链表任务控制块链表空任务块链表是在uC/OS-II初始化(OSInit())时系统自建的,用户可依据目标系统的实际需求,设定其链表长度。nOS_CFG.H文件中的宏常数OS_MAX_TASKS-用于定义最大用户任务数。nUCOS_II.H文件中的宏常数OS_N_SYS_TASKS-用于约定系统任务数,其值固定为2。当应用程序调用函数OSTaskCreate()创建一个任务时,这个函数会调用系统函数OSTCBInit()来为任务控制块进行初始化。这个函数首先为被创建任务从空任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各个成员进行赋值,最后再把这个任务控

23、制块链入到任务控制块链表的头部。当进行系统初始化时,初始化函数会按用户提供的任务数为系统创建具有相应数量的任务控制块并把它们链接为一个链表。由于这些任务控制块还没有对应的任务,故这个链表叫做空任务块链表。即相当于是一些空白的身份证。No.31Sep 2006任务控制块链表空任务控制块链表No.32Sep 2006uC/OS-II 中提供了系统函数 OSTaskDel(),用于删除一个任务-实质就是将该任务的TCB从“任务控制块列表”移到了“空任务控制块列表”。任务控制块及任务控制块链表任务控制块就相当于是一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理。n任务控制块链表No.33S

24、ep 2006任务控制块及任务控制块链表n任务控制块链表其他相关系统管理变量nOSTCBPrioTbl:OS_TCB*数据类型的数组,以 Prio 为下标存放已使能的 TCB 指针。用于加速 TCB 的访问。nOSTCBCur:全局系统变量,指向当前正在运行的任务的 TCB。OSTCBFreeList、OSTCBListOSTCBTbl -OSInit()建立的任务控制块数组OSTCBPrioTbl-任务控制块优先级数组OSTCBCurNo.34Sep 2006什么是多任务系统简单地说,就是能用一个处理器并发(注意,不是同时!)地运行多个程序的计算机管理系统。并发:由同一个处理器轮换地运行多个

25、程序。或者说是由多个程序轮班地占用处理器这个资源。且在占用这个资源期间,并不一定能够把程序运行完毕。并发过程示意图处理器如何进行程序的切换?No.35Sep 2006程序的切换处理器是个傻瓜,PC让它干啥,它就干啥。PC是个指路器,它指向哪儿,处理器就去哪儿。从此可以知道,哪个程序占有了PC,哪个程序就占有了处理器。深刻地理解PC是理解系统进行程序切换动作的关键。No.36Sep 2006所谓切换就是:PC 目标地址如何操作PC指令:不同的计算机类型的指令是不同的。数据传送指令子程序返回指令(由堆栈弹出)中断、中断返回指令(由堆栈弹出)No.37Sep 2006任务代码任务堆栈内存内存处理器P

26、CSP任务运行时与处理器之间的关系处理器通过两个指针寄存器(PC和SP)来与任务代码和任务堆栈建立联系并运行它寄存器组程序运行环境运行环境包括了两部分:处理器中的运行环境和内存中的运行环境No.38Sep 2006任务代码任务堆栈内存处理器PCSP多任务时的问题任务代码任务堆栈内存任务代码任务堆栈内存?当有多个任务时,处理器中的运行环境应该怎么办?寄存器组程序运行环境No.39Sep 2006程序 虚拟处理器PCSP 虚拟处理器PCSP 虚拟处理器PCSP 虚拟处理器PCSP调度器多任务时任务与处理器之间关系的处理程序处理器PCSP在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境由

27、操作系统的调度器按某种规则来进行这两个复制工作复制当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理器中复制当需要中止当前任务时,则把任务对应的虚拟处理器复制到内存复制再把另一个需要运行的任务的虚拟处理器复制到实际处理器中寄存器组寄存器组也就是说,任务的切换是任务运行环境的切换No.40Sep 2006虚拟处理器虚拟处理器应该存储的主要信息:1。程序的断点地址(PC)2。任务堆栈指针(SP)3。程序状态字寄存器(PSW)4。通用寄存器内容5。函数调用信息(已存在于堆栈)这些内容通常保存在任务堆栈中,这些内容也常叫做任务的上下文。其实,程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指

28、针SP实质上系统是通过SP的切换来实现程序的切换的。要建立一个概念:u具有控制块的程序才是一个可以被系统所运行的任务。u程序代码、私有堆栈、任务控制块 是任务的三要件。u任务控制块提供了运行环境的存储位置。No.41Sep 2006任务就绪表及任务调度 多任务操作系统的核心工作就是任务调度。所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器。C/OS_II进行任务调度的思想是“近似地每时每刻总是让优先级最高的就绪任务处于运行状态”。为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程序结束时总是调用调度器,来确定应该运行的任务并运行它。C/OS_II

29、进行任务调度的依据就是任务就绪表 No.42Sep 2006内核对任务的调度内核对任务的调度内核的主要职责之一,决定任务运行的次序决定任务运行的次序。基本的调度算法:p有先来先服务FCFS,最短周期优先SBFp优先级法Priorityp轮转法Round-Robin调度的基本方式有可占先式和非占先式。多数实时内核是基于优先级调度的多种方法的复合。优先级的概念p每个任务按其重要性被赋予一定的优先级。p静态优先级与动态优先级。p基于优先级的系统会出现优先级倒置的问题,一个好的实时内核应该提供解决倒置的方法。p已开发出多种算法用于实时任务的优先级分配,基本的有单调执行率调度法RMS和最早期限优先法ED

30、F等No.43Sep 2006非抢占式(不可剥夺式)的任务非抢占式(不可剥夺式)的任务(Non-Preemptive KernelNon-Preemptive Kernel)非抢占内核要求每个任务自我放弃非抢占内核要求每个任务自我放弃CPU的所有权。的所有权。p异步事件还是由中断服务来处理。异步事件还是由中断服务来处理。p中断服务可以使一个高优先级的任务由挂中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。起状态变为就绪状态。p中断服务以后控制权还是回到原来被中断中断服务以后控制权还是回到原来被中断了的那个任务。了的那个任务。优点:优点:p不可剥夺型内核的一个优点是响应中断快不可剥夺型内

31、核的一个优点是响应中断快问题:问题:不可剥夺型内核的任务级响应时间不可剥夺型内核的任务级响应时间是不确定的,不知道什么时候最高是不确定的,不知道什么时候最高优先级的任务才能拿到优先级的任务才能拿到CPU的控制的控制权,完全取决于应用程序什么时候权,完全取决于应用程序什么时候释放释放CPU。No.44Sep 2006基于优先级的抢占式调度基于优先级的抢占式调度最高优先级的任务一旦就绪,总能得最高优先级的任务一旦就绪,总能得到到CPU的控制权的控制权p当一个运行着的任务使一个比它优先级高当一个运行着的任务使一个比它优先级高的任务进入了就绪态的任务进入了就绪态p(时钟机制)当前任务的(时钟机制)当前

32、任务的CPU使用权就被使用权就被剥夺了,或者说被挂起了剥夺了,或者说被挂起了p那个高优先级的任务立刻得到了那个高优先级的任务立刻得到了CPU的控的控制权。制权。如果是中断服务子程序使一个高优先如果是中断服务子程序使一个高优先级的任务进入就绪态级的任务进入就绪态p中断完成时,中断了的任务被挂起、中断完成时,中断了的任务被挂起、p优先级高的那个任务开始运行。优先级高的那个任务开始运行。抢占式内核总是让就绪态的高优先级抢占式内核总是让就绪态的高优先级的任务先运行,中断服务程序可以抢的任务先运行,中断服务程序可以抢占占CPU,到中断服务完成时,内核让,到中断服务完成时,内核让此时优先级最高的任务运行(

33、不一定此时优先级最高的任务运行(不一定是那个被中断了的任务)。任务级系是那个被中断了的任务)。任务级系统响应时间得到了最优化统响应时间得到了最优化 No.45Sep 2006时间片轮转调度时间片轮转调度当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间,叫做时间额度(定的一段时间,叫做时间额度(quantum),然后切换给另一个任务。,然后切换给另一个任务。也叫做时间片调度。内核在满足以下条件时,把也叫做时间片调度。内核在满足以下条件时,把CPU控制权交给下一控制权交给下一个任务就绪态的任务个任务就绪态的任务当前

34、任务已无事可做当前任务已无事可做当前任务在时间片还没结束时已经完成了。当前任务在时间片还没结束时已经完成了。No.46Sep 2006抢占式任务调度问题优先级反转抢占式任务调度问题优先级反转优先级反转:任务优先级反转:任务1任务任务2任任务务3因为任务因为任务1要等要等,任务任务3释放占有的释放占有的那个共享资源。那个共享资源。由于任务由于任务2剥夺任剥夺任务务3的的CPU使用权使用权使任务使任务1的状况更的状况更加恶化加恶化,任务任务2使任使任务务1增加了额外的增加了额外的延迟时间。任务延迟时间。任务1和任务和任务2的优先级的优先级发生了反转。发生了反转。No.47Sep 2006优先级继承

35、优先级继承(Priority inheritance)(Priority inheritance)方法解决优先级反转方法解决优先级反转内核知道该信号量内核知道该信号量被任务被任务3占用了占用了,而而任务任务3的优先级比的优先级比任务任务1低低,内核于是内核于是将任务将任务3的优先级的优先级升至与任务升至与任务1一样一样问题,问题,TASK3和和TASK2的优先级反的优先级反转转 No.48Sep 2006目目 录录嵌入式操作系统概念嵌入式操作系统的基本原理(uC/OS-II)p任务和调度p中断和时钟管理p任务同步和通信p动态内存管理No.49Sep 2006uC/OS-II的中断n基本概念基本

36、概念n中断中断-任务正在执行过程中被某紧要事件打断运任务正在执行过程中被某紧要事件打断运行,而去处理该紧迫行,而去处理该紧迫事件的过程;事件的过程;n中断源中断源-中断信号的申请者;中断信号的申请者;n中断响应中断响应-CPU对中断信号相应处理的机制;对中断信号相应处理的机制;n中断嵌套中断嵌套-优先级高的中断可以再中断低级的优先级高的中断可以再中断低级的ISR;nISR-(某紧要事件的)中断服务处理程序;(某紧要事件的)中断服务处理程序;n中断向量中断向量-ISR 的入口地址。的入口地址。No.50Sep 2006ARM处理器中断控制原理VICIntSelect-中断选择寄存器,配置32个中

37、断源的F/I属性。1-FIQ;VICIntEnable-中断使能寄存器,控制相应通道中断申请屏蔽否。1-使能;No.51Sep 2006异常向量表Reset LDR PC,ResetAddr LDR PC,UndefinedAddr LDR PC,SWI_Addr LDR PC,PrefetchAddr LDR PC,DataAbortAddr DCD 0 xb9205f80 LDR PC,PC,#-0 xff0 LDR PC,FIQ_AddrResetAddrDCD ResetInitUndefinedAddr DCD UndefinedSWI_AddrDCD SoftwareInterru

38、ptPrefetchAddrDCD PrefetchAbortDataAbortAddr DCD DataAbortNouseDCD 0IRQ_AddrDCD 0FIQ_AddrDCD FIQ_Handler8个字单元,每单元存放一条转移指令;8个字单元,每单元存放一条目标地址;0 x00-0 x04-0 x08-0 x0c-0 x10-0 x14-0 x18-0 x1c-No.52Sep 2006uFIQ中断的响应:uIRQ中断的响应:在存储器0 x1c单元安排有指令:LDRPC,FIQ_Addr在存储器0 x18单元安排有指令:LDRPC,PC,#-0 xff0备注:执行本指令时,PC=0

39、 x0000,0020;0 x0000,00200 x0000,0ff0=0 x0000,0020+0 xffff,f010=0 xffff,f030(即VICVectAddr寄存器)No.53Sep 20061、硬件自动过程;2、ISR过程;无高级任务激活返回有高级任务激活返回No.54Sep 2006uC/OS-II的中断nuC/OS-II 的中断过程的中断过程n在应用系统设计中编写在应用系统设计中编写uC/OS-II的中断服务程序的中断服务程序(ISR)时,要用到两个重要的系统函数。)时,要用到两个重要的系统函数。nOSIntEnter()、OSIntExit()nuC/OS-II 允许

40、中断嵌套,最多可嵌套允许中断嵌套,最多可嵌套 255 层;系统层;系统全局变量全局变量 OSIntNesting 记录中断嵌套层数。记录中断嵌套层数。No.55Sep 2006uC/OS-II的中断n系统函数系统函数 OSIntEnter()、OSIntExit()nOSIntEnter()nOSIntExit()函数原型:函数原型:void OSIntEnter(void)主要功能:系统变量主要功能:系统变量 OSIntNesting 自加自加1,目的告诉,目的告诉uC/OS-II系统记录中系统记录中断的嵌套层数。断的嵌套层数。函数原型:函数原型:void OSIntExit(void)主要

41、功能:系统变量主要功能:系统变量 OSIntNesting 自减自减1,目的告诉,目的告诉uC/OS-II系统中断的嵌套系统中断的嵌套层数,层数,OSIntNesting=0时,则进行一次中断级的任务调度时,则进行一次中断级的任务调度 OSIntCtxSw()。No.56Sep 2006uC/OS-II的中断n应用程序中的临界段应用程序中的临界段n临界段的基本概念及实现原理临界段的基本概念及实现原理nuC/OS-II 提供了两个宏操作用于临界段提供了两个宏操作用于临界段工程应用中有工程应用中有“代码段必须被连续执行代码段必须被连续执行”的需求,这种不允许被打的需求,这种不允许被打断执行的代码段

42、称为断执行的代码段称为“临界代码段临界代码段”或或“原子操作原子操作”。通过开关。通过开关CPU中中断来实现。断来实现。OS_ENTER_CRITICAL()-进入临界段进入临界段OS_EXIT_CRITICAL()-退出临界段退出临界段注意事项:用户原子操作尽量的少且小,因为它会影响系统的实时性。注意事项:用户原子操作尽量的少且小,因为它会影响系统的实时性。No.57Sep 2006uC/OS-II的中断n应用程序中的临界段举例应用程序中的临界段举例n在在uC/OS-II系统文件中很多地方都要用到。系统文件中很多地方都要用到。n在用户程序中也可能用到,如进行在用户程序中也可能用到,如进行PL

43、L重置。重置。PLLCON=V_PLLCON_DATA;PLLCFG=V_PLLCFG_DATA;OS_ENTER_CRITICAL();/进入临界段进入临界段PLLFEED=0 xaa;PLLFEED=0 x55;OS_EXIT_CRITICAL();/退出临界段退出临界段No.58Sep 2006uC/OS-II的中断nuC/OS-II 的中断服务程序的中断服务程序(ISR)的编写的编写uC/OS-II 对对 ARM7TDMI 的的 IRQ 进行了管理,用户的使用方式与不受管理的进行了管理,用户的使用方式与不受管理的 FIQ 有较大的区别。有较大的区别。uC/OS-II 在对在对 ARM7

44、TDMI 移植时已作了处理(移植时已作了处理(ARM IRQ.inc 文件),用户可以文件),用户可以直接使用直接使用C语言编程语言编程 ISR,此之前用户要编写,此之前用户要编写VIC配置及配置及ISR 句柄关联代码。句柄关联代码。void xxx_Eception(void)OS_ENTER_CRITICAL();清除中断源标志;VICVectAddr=0;/通知 VIC 中断已响应 ISR 业务代码;OS_EXIT_CRITICAL();No.59Sep 2006uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序(ISR)的编写的编写-中断句柄中断句柄uC/OS-I

45、I 约定:每个受控的约定:每个受控的 ISR 都必须按照都必须按照ADS汇编宏的格式要求,在汇编宏的格式要求,在 IRQ.s 的尾部添加中断句柄:的尾部添加中断句柄:xxx_Handler HANDLER xxx_Exception备注:备注:nxxx_Handeler 句柄是在句柄是在 target.c 文件文件 void VICInit(void)函数中约定的;函数中约定的;n中断源用中断源用“中断源通道号中断源通道号”对应指派;对应指派;nHANDLER 是语言关键词(是语言关键词(keyword););nxxx_Exception 是是 ISR 的函数名;的函数名;n在中断源正式工作前

46、,首先要进行在中断源正式工作前,首先要进行“中断源初始化中断源初始化”(VIC初始化初始化),这部分的代码一般编放在一个硬件系统初始化函数中(该函数一般这部分的代码一般编放在一个硬件系统初始化函数中(该函数一般是编写在是编写在 target.c 文件中),(代码少的话)也可以放在文件中),(代码少的话)也可以放在main()函数函数中。中。No.60Sep 2006uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序(ISR)的编写的编写-VIC 配置配置VIC初始化部分主要是:用初始化部分主要是:用“中断通道号中断通道号”指定中断源和对应的中断句柄。例指定中断源和对应的中

47、断句柄。例如:指定如:指定Timer1 的的 ISR 句柄为:句柄为:Timer1_Handler,并将其配置到硬件优先级,并将其配置到硬件优先级 10 代代码如下:码如下:voidVICInit(void)externvoidTimer1_Handler(void);VICVectAddr10=(uint32)Timer1_Handler;VICVectCntl10=(0 x20|0 x05);VICIntEnable=15;/允许 Timer1 中断 在在 IRQ.s 文件的尾部添加中断句柄指定:文件的尾部添加中断句柄指定:Timer1_Handler HANDLER Timer1_Exc

48、eption 编写编写 Timer1_ISR(Timer1_Exception)void Timer1_Exception(void)关中断;清中断;通知关中断;清中断;通知VIC中断已响应;开中断;中断已响应;开中断;C 代码完成代码完成Timer1 具体业务处理;具体业务处理;No.61Sep 2006uC/OS-II 的中断nuC/OS-II 的中断服务程序的中断服务程序(ISR)的编写的编写-外设初始化外设初始化若想使指定的外设按照我们约定的方式工作,需对它进行初始化,此部分代码若想使指定的外设按照我们约定的方式工作,需对它进行初始化,此部分代码主要工作:设置外设的工作方式。例如:设置

49、主要工作:设置外设的工作方式。例如:设置 Timer1 的定时常数、中断允许否。的定时常数、中断允许否。代码如下:代码如下:void Timer1Init(void)T1IR=0 xffffffff;/*清除清除Timer1的中断标示的中断标示*/T1TC=0;/*Timer1的定时计数器的定时计数器TC赋初值赋初值*/T1TCR=0 x01;/*Timer1使能使能&解复位解复位*/T1MCR=0 x03;/*设置设置Timer1 匹配控制寄存器:当匹配控制寄存器:当 T1TC=T1MR0时,时,Timer1 复位并产生中断复位并产生中断*/T1MR0=(Fpclk/OS_TICKS_PER

50、_SEC);/*设置匹配常数设置匹配常数*/No.62Sep 2006uC/OS-II 的中断nuC/OS-II 的中断使用策略的中断使用策略 (备注:具体情况具体分析)(备注:具体情况具体分析)n起因:起因:n故而:故而:uC/OS-II对任务有完备的管理能力,一系统函数的方式为用户提供了丰对任务有完备的管理能力,一系统函数的方式为用户提供了丰富的管理手段;富的管理手段;硬件层上希望硬件层上希望ISR尽量的短;尽量的短;通常并不将中断事件对应的业务处理代码安排在通常并不将中断事件对应的业务处理代码安排在ISR中,而是在中,而是在ISR中仅中仅安排产生安排产生“信号信号”或或“消息消息”,将物

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 成人自考

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁