RTOS uCOS-II原理及应用.ppt
《RTOS uCOS-II原理及应用.ppt》由会员分享,可在线阅读,更多相关《RTOS uCOS-II原理及应用.ppt(113页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、RTOS uCOS-II原理及应用page2022-8-13西安邮电学院西安邮电学院 计算机系计算机系2 2第2章 uC/OS-II中的任务page西安邮电学院西安邮电学院 计算机系计算机系3 32022-8-13第2章 目录n1、任务的基本概念n2、任务堆栈n3、任务控制块及任务控制块链表n4、任务就绪表及任务调度n5、任务的创建n6、任务的挂起和恢复n7、其他任务管理函数n8、uC/OS-II的初始化和任务的启动page西安邮电学院西安邮电学院 计算机系计算机系4 42022-8-13第2章 补充.目录n1、任务的特性n2、任务的划分目标n3、任务的划分方法n4、任务的可调度性分析n5、任
2、务的执行分类和优先级安排n6、任务设计中的问题n7、系统设计编码实现过程n8、中断服务程序的设计page西安邮电学院西安邮电学院 计算机系计算机系5 52022-8-13第2章 目录n1、任务的基本概念n2、任务堆栈n3、任务控制块及任务控制块链表n4、任务就绪表及任务调度n5、任务的创建n6、任务的挂起和恢复n7、其他任务管理函数n8、uC/OS-II的初始化和任务的启动page西安邮电学院西安邮电学院 计算机系计算机系6 62022-8-132.1 任务的基本概念任务的基本概念n复杂问题 “分而治之” 的问题解题思路。n针对目标系统拆分后的 “小且易” 的问题的具体处理方法编码和数据结构
3、- 任务。nuC/OS-II的两种任务:系统任务、用户任务。n任务的组成:n任务控制块 - uC/OS-II进行任务管理用的一个数据结构。n任务代码 - 描述任务算法的程序编码。n任务堆栈 - 任务的工作现场环境。page西安邮电学院西安邮电学院 计算机系计算机系7 72022-8-132.1 任务的基本概念任务的基本概念page西安邮电学院西安邮电学院 计算机系计算机系8 82022-8-132.1 任务的基本概念任务的基本概念 “宏观宏观” 上的多任务并发,实际上是上的多任务并发,实际上是用单用单 CPU 进行多任务处理,进行多任务处理,“微观微观” 任任何时刻,只能运行一个任务,存在何时
4、刻,只能运行一个任务,存在CPU资资源竞争源竞争 - 任务调度、任务现场。任务调度、任务现场。 各个任务在多任务系统中也随着环境条各个任务在多任务系统中也随着环境条件的情况而具有不同的状态。件的情况而具有不同的状态。 任务状态划分也是多任务操作系统的管任务状态划分也是多任务操作系统的管理手段。理手段。n 任务的任务的 5 种状态:种状态:nSleep - 仅有编码未激活。nReady - 已激活并“万事俱备,只欠调度”nRunning - 正占用 CPU 运行自己。nWait - 等待某事件发生。nISR_Sta - Running状态的任务被中断后进入的状态。page西安邮电学院西安邮电学院
5、 计算机系计算机系9 92022-8-13任务的状态及其转换正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。 任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态 系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。 处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态 一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态 page西安邮电学院西安邮电学院 计算机系计算机系10102022-8-1
6、3n 用户任务代码的一般结构void MyTask(void *pdata) / 任务的初始化任务的初始化 for ( ; ; )/超循环构成任务体超循环构成任务体 可被中断的用户代码片断;可被中断的用户代码片断; OS_ENTER_CRITICAL(); /进入临界区(关中断)进入临界区(关中断) 不可被中断的用户代码片断;不可被中断的用户代码片断; OS_EXIT_CRITICAL(); /退出临界区(开中断)退出临界区(开中断) 可被中断的用户代码片断;可被中断的用户代码片断; page西安邮电学院西安邮电学院 计算机系计算机系11112022-8-13n 用户应用程序的一般结构n“用户
7、任务用户任务” 代码形式上很像代码形式上很像 C函数,但他不是函数,但他不是函数!函数!n“任务任务” 不能被主函数不能被主函数 main( ) 或其他函数调用,或其他函数调用,只能被主函数或已激活任务只能被主函数或已激活任务创建创建。n任务的运行由操作系统调度管理。任务的运行由操作系统调度管理。void MyTask1(void *pdata) void MyTask2(void *pdata) void main( ) OSInit( ); OSTaskCreate( MyTask1, ); OSTaskCreate( MyTask2, ); OSStart( ); page西安邮电学院西
8、安邮电学院 计算机系计算机系12122022-8-132.1 任务的基本概念任务的基本概念n在此我们学习了uC/OS-II 的 3 个系统函数和 2个宏。nOSInit( ) - 初始化初始化 uC/OS-II 环境。环境。nOSTaskCreate( ) - 创建任务系统函数。创建任务系统函数。nOSStart( ) - 启动启动 uC/OS-II 任务调度器。任务调度器。nOS_ENTER_CRITICAL( ) - 进入临界区进入临界区 (宏)(宏)nOS_EXIT_CRITICAL( ) - 退出临界区退出临界区 (宏)(宏)nOSInit( ) 函数原型:函数原型: void OSI
9、nit( void )nOSStar( ) 函数原型:函数原型: void OSStart( void )nOSTaskCreate( ) 函数原型:函数原型: INT8U OSTaskCreate( void (*task)(void *pd) , /指向任务的指针指向任务的指针 void *pdata , /传递给任务的参数传递给任务的参数 OS_STK *ptos , /任务堆栈栈顶的指针任务堆栈栈顶的指针 INT8U prio /任务的优先级别任务的优先级别 )page西安邮电学院西安邮电学院 计算机系计算机系13132022-8-13OSTaskCreate( ) 函数使用举例:定义
10、任务定义任务 task_Avoid task_A(void* pdata) ; /任务初始化部分 while (1) ; /任务功能代码 在系统在系统 “创建创建” 任务任务 task_Avoid main(void) OSInit(); /系统初始化部分 OSTaskCreate( task_A, void * 0, &MystackTop, 8 ); OSStart();page西安邮电学院西安邮电学院 计算机系计算机系14142022-8-132.1 任务的基本概念任务的基本概念n系统任务n空闲任务(空闲任务(OSTaskIdel( ))n统计任务(统计任务(OSTaskStat( ))
11、原型:原型:void OSTaskIdel(void* pdata)原型:原型:void OSTaskStat(void* pdata)n 空闲任务(空闲任务(OSTaskIdel( ))使用说明:)使用说明: 1、uC/OS-II规定用户程序中必须使用规定用户程序中必须使用OSTaskIdel。 2、该任务不能用软件删除。、该任务不能用软件删除。 3、该任务是、该任务是uC/OS-II初始化时自动创建,其任务优先初始化时自动创建,其任务优先级固定为最低级,用户也可修改该任务的业务。级固定为最低级,用户也可修改该任务的业务。 4、目的、目的 - 使使 CPU 在没有用户任务可执行时也有事可在没
12、有用户任务可执行时也有事可做。做。n 统计任务(统计任务(OSTaskStat( ))使用说明:)使用说明: 1、功能完成用户任务、功能完成用户任务 CPU 使用率的统计,结果以百分使用率的统计,结果以百分比的形式存放在变量比的形式存放在变量 OSCPUsage 中。中。 2、该任务用户可选择使用。、该任务用户可选择使用。OS_CFG.H文件中的常数文件中的常数OS_TASK_STAT_EN 设置为设置为 1,使能该函数。,使能该函数。 3、用户在、用户在OS_CFG.H中使能该任务后,系统自动创建中使能该任务后,系统自动创建该任务,但在用户使用统计数据前必须调用系统该任务,但在用户使用统计数
13、据前必须调用系统函数函数 OSStatInit() 先进行初始化。先进行初始化。 4、该任务固定拥有次末任务优先级。、该任务固定拥有次末任务优先级。page西安邮电学院西安邮电学院 计算机系计算机系15152022-8-132.1 任务的基本概念任务的基本概念n任务的优先权和优先级别任务的优先权和优先级别nuC/OS-II 的每个任务都必须有唯一的优先级。nuC/OS-II 最多可以管理64个优先级别分配给64个任务。nuC/OS-II 中用一个8b的整型数来表示优先级别,数字越小,优先级越高,prio = 0 的任务优先级最高。nuC/OS-II 中使用任务的优先级(prio)作为任务句柄。
14、n用户通过修改 OS_CFG.H 中的宏定义常数 OS_LOWEST_PRIO 的值,约定本用户系统的最大优先级数。page西安邮电学院西安邮电学院 计算机系计算机系16162022-8-13第2章 目录n1、任务的基本概念n2、任务堆栈n3、任务控制块及任务控制块链表n4、任务就绪表及任务调度n5、任务的创建n6、任务的挂起和恢复n7、其他任务管理函数n8、uC/OS-II的初始化和任务的启动page西安邮电学院西安邮电学院 计算机系计算机系17172022-8-132.2 任务堆栈任务堆栈n堆栈堆栈 - LIFO访问原则组织的连续存储器。访问原则组织的连续存储器。n任务堆栈在任务堆栈在 u
15、C/OS-II 中的应用:中的应用:n任务堆栈是任务的三大组成部分之一。任务堆栈是任务的三大组成部分之一。n保存保存 CPU 寄存器现场(寄存器现场(R0R12、LR、SPSR 等)。等)。n本本 Task 的私有数据。的私有数据。page西安邮电学院西安邮电学院 计算机系计算机系18182022-8-132.2 任务堆栈任务堆栈n任务堆栈的创建任务堆栈的创建- 在创建任务的同时,任务堆栈即被创建。在创建任务的同时,任务堆栈即被创建。举例举例:#define MyTaskStkSize 64OS_STK MyTaskStk MyTaskStkSize /在在 OS_CPU.H中定义中定义 OS
16、_STK / typedef INT32U OS_STKINT8U OSTaskCreate( void (*task) (void *pd), /指向任务的指针指向任务的指针 void * pdata, /传递给任务的参数传递给任务的参数 MyTaskStk MyTaskStkSize 1 /任务堆栈任务堆栈栈顶栈顶的指针的指针 INT8U prio /任务的优先级别任务的优先级别 )page西安邮电学院西安邮电学院 计算机系计算机系19192022-8-132.2 任务堆栈任务堆栈n任务堆栈的使用注意事项任务堆栈的使用注意事项 _ 存在两种堆栈形式存在两种堆栈形式n递增堆栈递增堆栈 - 进
17、栈操作进栈操作向大地址方向发展。向大地址方向发展。n递减堆栈递减堆栈 - 进栈操作进栈操作向小地址方向发展。向小地址方向发展。OSTaskCreate( &MyTaskStkStkSize - 1, )OSTaskCreate( &MyTaskStk 0 , )备注:利用条件编译技术和备注:利用条件编译技术和 OS_CPU.H 中的宏定义常数中的宏定义常数OS_STK_GROWTH 编写易移植用户系统;编写易移植用户系统;“1” - 递减堆栈递减堆栈 for ARM CPU。page西安邮电学院西安邮电学院 计算机系计算机系20202022-8-13第2章 目录n1、任务的基本概念n2、任务堆
18、栈n3、任务控制块及任务控制块链表n4、任务就绪表及任务调度n5、任务的创建n6、任务的挂起和恢复n7、其他任务管理函数n8、uC/OS-II的初始化和任务的启动page西安邮电学院西安邮电学院 计算机系计算机系21212022-8-132.3 任务控制块及任务控制块链表任务控制块及任务控制块链表n任务控制块(任务控制块(TCB)- 任务在系统中的身份证nTCB - uC/OS-II 中用于记录任务信息(任务堆栈指针、中用于记录任务信息(任务堆栈指针、任务当前状态、任务优先级别等)的数据结构。任务当前状态、任务优先级别等)的数据结构。nuC/OS-II 将系统中的所有将系统中的所有 TCB 构
19、成两个链表构成两个链表(OSTCBList、OSTCBFreeList)进行任务管理。)进行任务管理。u空任务控制块链表空任务控制块链表 - 未被分配的未被分配的 TCB 链链 OSTCBFreeList。u任务控制块链表任务控制块链表 - 已分配的已分配的 TCB 链链 OSTCBList。page西安邮电学院西安邮电学院 计算机系计算机系22222022-8-132.3 任务控制块及任务控制块链表任务控制块及任务控制块链表n任务控制块(任务控制块(TCB)的结构)的结构任务控制块结构的主要成员任务控制块结构的主要成员typedef struct os_tcb struct os_tcb *
20、OSTCBNext; /指向下一个指向下一个TCB的指针的指针 struct os_tcb *OSTCBPrev; /指向前一个指向前一个TCB的指针的指针 OS_STK *OSTCBStkPtr; /指向任务堆栈栈顶的指针指向任务堆栈栈顶的指针 INT16U OSTCBDly; /任务等待时间任务等待时间 INT8U OSTCBStat; /任务的当前状态标志任务的当前状态标志 INT8U OSTCBPrio; /任务的优先级别任务的优先级别 OS_TCB;page西安邮电学院西安邮电学院 计算机系计算机系23232022-8-132.3 任务控制块及任务控制块链表任务控制块及任务控制块链表
21、n任务控制块链表任务控制块链表n空任务控制块链表(空任务控制块链表(OSTCBFreeList)n任务控制块链表任务控制块链表 (OSTCBList)- uC/OS-II 用两个链表来管理用两个链表来管理 TCBpage西安邮电学院西安邮电学院 计算机系计算机系24242022-8-132.3 任务控制块及任务控制块链表任务控制块及任务控制块链表n任务控制块链表任务控制块链表 空任务块链表是在空任务块链表是在 uC/OS-II 初始化(初始化(OSInit())时系)时系统自建的,用户可依据目标系统的实际需求,设定其链表统自建的,用户可依据目标系统的实际需求,设定其链表长度。长度。nOS_CF
22、G.H 文件中的宏常数文件中的宏常数 OS_MAX_TASKS - 用于用于定义最大用户任务数。定义最大用户任务数。nUCOS_II.H 文件中的宏常数文件中的宏常数 OS_N_SYS_TASKS - 用用于约定系统任务数,其值固定为于约定系统任务数,其值固定为 2 。当应用程序调用函数OSTaskCreate( )创建一个任务时,这个函数会调用系统函数OSTCBInit( )来为任务控制块进行初始化。这个函数首先为被创建任务从空任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各个成员进行赋值,最后再把这个任务控制块链入到任务控制块链表的头部。 当进行系统初始化时,初始化函数会按
23、用户提供的任务数为系统创建具有相应数量的任务控制块并把它们链接为一个链表。 由于这些任务控制块还没有对应的任务,故这个链表叫做空任务块链表。即相当于是一些空白的身份证。page西安邮电学院西安邮电学院 计算机系计算机系25252022-8-13任务控制块链表空任务控制块链表page西安邮电学院西安邮电学院 计算机系计算机系26262022-8-13uC/OS-II 中提供了系统函数 OSTaskDel( ),用于删除一个任务 - 实质就是将该任务的TCB从“任务控制块列表” 移到了“空任务控制块列表” 。 2.3 任务控制块及任务控制块链表任务控制块及任务控制块链表任务控制块就相当于是一个任务
24、的身份证,没有任务控制块的任务是不能被系统承认和管理。 n任务控制块链表任务控制块链表page西安邮电学院西安邮电学院 计算机系计算机系27272022-8-132.3 任务控制块及任务控制块链表任务控制块及任务控制块链表n任务控制块链表其他相关系统管理变量任务控制块链表其他相关系统管理变量nOSTCBPrioTbl :OS_TCB* 数据类型的数组,数据类型的数组,以以 Prio 为下标存放已使能的为下标存放已使能的 TCB 指针。用指针。用于加速于加速 TCB 的访问。的访问。nOSTCBCur:全局系统变量,指向当前正在:全局系统变量,指向当前正在运行的任务的运行的任务的 TCB 。OS
25、TCBFreeList、OSTCBListOSTCBTbl - OSInit()建立的任务控制块数组建立的任务控制块数组OSTCBPrioTbl - 任务控制块优先级数组任务控制块优先级数组OSTCBCurpage西安邮电学院西安邮电学院 计算机系计算机系28282022-8-13第2章 目录n1、任务的基本概念n2、任务堆栈n3、任务控制块及任务控制块链表n4、任务就绪表及任务调度n5、任务的创建n6、任务的挂起和恢复n7、其他任务管理函数n8、uC/OS-II的初始化和任务的启动page西安邮电学院西安邮电学院 计算机系计算机系29292022-8-13补充:多任务补充:多任务 OS -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RTOS uCOS-II原理及应用 uCOS II 原理 应用
限制150内