书签 分享 收藏 举报 版权申诉 / 34
上传文档赚钱

类型第三章11进程描述和状态控制课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4414813
  • 上传时间:2022-12-07
  • 格式:PPT
  • 页数:34
  • 大小:470.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第三章11进程描述和状态控制课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    第三 11 进程 描述 状态 控制 课件
    资源描述:

    1、2022-12-71第三章 任务管理3.3 任务同步3.2 多任务3.1 任务描述和状态,控制 2022-12-723.1.1 任务基本概念从代码上看,uC/OS-II任务就是一个函数uC/OS-II任务有两种:用户任务和系统任务从任务的存储结构上看,uC/OS-II由三部分组成:任务程序代码(函数):任务的执行部分任务堆栈:用来保存任务的工作环境任务控制块:记录任务的各个属性2022-12-733.1.2 任务的状态uC/OS-II中任务有5中状态睡眠状态:任务只是以代码的形式驻留在程序空间(ROM或RAM),还没有交给操作系统管理时的情况叫做睡眠状态。即任务在没有被分配任务控制块或者被剥夺

    2、了任务控制块时的状态叫做睡眠状态。就绪状态:如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件这时任务的状态叫做就绪状态2022-12-74运行状态:处于就绪态的任务如果经调度器判断获得了CPU的使用权,进入运行状态。等待状态:正在运行的任务需要等待一段时间或需要等待一个事件发生在运行时,该任务就把CPU的使用权让给其他任务,进入等待状态2022-12-75中断服务状态:一个正在运行的任务一旦响应中断请求就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态。2022-12-76状态间的切换2022-12-772022-12-783.1.3 用

    3、户任务代码一般结构无限循环结构void mytask(void*pdata)for(;)可以被中断的用户代码;OS_ENTER_CRITICAL();/进入临界段(关中断)不可以被中断的用户代码;OS_EXIT_CRITICAL();/退出临界段(开中断)可以被中断的用户代码;2022-12-79OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()是uC/OS-II定义的两个宏。分别封装了关中断代码和开中断代码2022-12-710用户应用程序一般结构void Mytask1(void*pdata)/定义用户任务1for(;).void Mytask2(void*pda

    4、ta)/定义用户任务2for(;).void main().OSInit();/初始化uc/os.OSTaskCreate(Mytask1,.);/创建用户任务1OSTaskCreate(Mytask2,.);/创建用户任务2.OSStart();/启动uc/os2022-12-7113.1.4 系统任务uC/OS-II预定义了两个系统任务:空闲任务和统计任务空闲任务是每个应用程序必须使用的统计任务是应用程序可以根据实际需求来选择使用的2022-12-7121.空闲任务任务在系统中可以有5种状态,即系统极有可能会在某个时间内无用户任务可运行而处于所谓空闲状态。为了使CPU在没有用户任务可执行时

    5、有事可做,uC/OS-II提供了一个叫做空闲任务OSTaskIdle()的系统任务。代码如下:2022-12-713void OSTask(void*pdata)#if OS_CRITICAL_METHOD=3OS_CPU_SR cpu_sr;#endifpdata=pdata;/防止某些编译器报错for(;)OS_ENTER_CRITICAL();/关闭中断 OSdleCtr+;/计数OS_EXIT_CRITICAL();/开中断2022-12-7142.统计任务该任务每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便其他应用程序了解C

    6、PU的利用率。是否使用统计任务,用户可以根据应用程序的实际需求来进行选择。2022-12-7153.1.4 任务堆栈为了满足任务切换和响应中断时保存CPU寄存器中的内容及任务调用其他函数时的需要,每个任务都有自己的堆栈所有uC/OS-II任务的控制块中都含有一个指向该任务堆栈的指针2022-12-716任务堆栈的创建为了定义任务堆栈的方便,在文件OS_CPU.H中专门定义了一个数据类型OS_STK:typedef unsigned int OS_STK;/该类型长度为16位在定义任务堆栈的栈区时,只要定义一个OS_STK类型的数组即可。如:#define TASK_STK_SIZE 512/定

    7、义堆栈长度(1024)OS_STK TaskStkTASK_STK_SIZE/定义数组作为任务堆栈2022-12-717当调用OSTaskCreate()来创建一个任务时,把数组的指针传递给函数OSTaskCreate()中的堆栈栈顶参数,就可以把数组与任务关联起来而成为该任务的任务堆栈2022-12-718INT8UOSTaskCreate(void(*task)(void*pd),/指向任务的指针void*pdata,/传递给任务的参数OS_STK*ptos,/任务堆栈栈顶指针INT8U prio/任务优先级别);2022-12-719需要注意的是:堆栈的增长方向是随系统所使用的处理器不同

    8、而不同的。有的处理器要求堆栈的增长方向是向上的,而另一些处理器要求堆栈的增长方向是向下的使用函数OSTaskCreate()创建任务时,要注意所使用的处理器所支持的堆栈增长方向2022-12-720任务堆栈的初始化应用程序在创建一个新任务时,必须把系统启动这个任务时所需要的CPU各寄存器初始数据(任务指针,任务堆栈指针,程序状态字等)存放在任务堆栈把任务初始数据存放到任务堆栈的工作就叫做任务堆栈的初始化系统提供OSTaskStkInit()2022-12-721OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdato,OS_STK*ptos,IN

    9、T16U opt);通常用户不会直接接触到这个函数,改函数有任务创建函数OSTaskCreate()调用2022-12-7223.1.5 任务控制块uC/OS-II用来记录任务的堆栈指针,任务的当前状态,任务的优先级等一些任务管理有关的属性的表就叫做任务控制块任务控制块相当于一个任务的身份证,系统通过任务控制块感知和管理任务uC/OS-II把系统所有任务的控制块链接为两条链表,并通过它们管理各个任务2022-12-723任务控制块是一个结构体数据结构,用于记录各个任务的信息。当任务的CPU的使用权被剥夺时,uCOS-II用它来保存任务的当前状态。当任务重新获得CPU的使用权时,任务控制块能确保

    10、任务从当时被中断的那一点丝毫不差的继续执行。任务控制块全部存放在RAM中。2022-12-724typedef struct os_tcb OS_STK *OSTCBStkPtr;/*指向当前任务使用的堆栈的栈顶。uCOS-II允许每个任务堆栈的大小可以不同,这样用户可以根据实际需要定义任务堆栈的大小,可以节省RAM的空间。另外,由于OSTCBStkPtr是该结构体中的第一个变量,所以可以使用汇编语言方便的访问,因为其偏移量是0。当切换任务时,用户可以容易的知道就绪任务中优先级最高任务的栈顶。*/#if OS_TASK_CREATE_EXT_EN 0u void *OSTCBExtPtr;/*

    11、指向用户定义的扩展任务控制块*/OS_STK *OSTCBStkBottom;/*指向任务堆栈的栈底。需要考虑一下你使用的MCU的栈指针是按照从高到低还是从低到高变化的。这个变量在测试任务需要的栈空间的时候需要使用。*/INT32U OSTCBStkSize;/*同样,该变量也是测试任务需要的栈空间需要。需要注意的是,该变量存储的是指针元的数目,而不是字节数目。*/INT16U OSTCBOpt;/*传给函数OSTaskCreateExt()的选择项。目前有OS_TASK_OPT_STK_CHK,OS_TASK_OPT_STK_CLR,OS_TASK_OPT_SAVE_EP */INT16U

    12、OSTCBId;/*Task ID(0.65535),目前没有使用。*/#endif 2022-12-725 struct os_tcb *OSTCBNext;struct os_tcb *OSTCBPrev;/*指向TCB的双向链表的前后链接,在OSTimeTick()中使用,用来刷新各任务的任务延迟变量.OSTCBDly。*/#if(OS_EVENT_EN)|(OS_FLAG_EN 0u)OS_EVENT *OSTCBEventPtr;/*指向事件控制块的指针。*/#endif#if(OS_EVENT_EN)&(OS_EVENT_MULTI_EN 0u)OS_EVENT *OSTCBEve

    13、ntMultiPtr;/*指向多重事件控制块的指针*/#endif#if(OS_Q_EN 0u)&(OS_MAX_QS 0u)|(OS_MBOX_EN 0u)void *OSTCBMsg;/*指向传递给任务的消息的指针。*/#endif 2022-12-726#if(OS_FLAG_EN 0u)&(OS_MAX_FLAGS 0u)#if OS_TASK_DEL_EN 0u OS_FLAG_NODE *OSTCBFlagNode;/*指向事件标志的节点的指针。*/#endif OS_FLAGS OSTCBFlagsRdy;/*当任务等待事件标志组时,该变量是使任务进入就绪态的事件标志。*/#en

    14、dif INT32U OSTCBDly;/*记录事件延时或者挂起的时间。*/INT8U OSTCBStat;/*任务状态字。比如就绪态、等待*/INT8U OSTCBStatPend;/*任务挂起状态。*/INT8U OSTCBPrio;/*任务优先级*/INT8U OSTCBX;/*计算优先级用*/INT8U OSTCBY;/*计算优先级用*/#if OS_LOWEST_PRIO 0u INT8U OSTCBDelReq;/*表示任务是否需要删除。*/#endif#if OS_TASK_PROFILE_EN 0u INT32U OSTCBCtxSwCtr;/*任务切换的次数。*/INT32U

    15、 OSTCBCyclesTot;/*任务运行的时钟周期数。*/INT32U OSTCBCyclesStart;/*任务恢复开始的循环计数器。*/OS_STK *OSTCBStkBase;/*指向任务栈开始的指针。*/INT32U OSTCBStkUsed;/*使用的栈的字节数*/#endif#if OS_TASK_NAME_EN 0u INT8U *OSTCBTaskName;#endif#if OS_TASK_REG_TBL_SIZE 0u INT32U OSTCBRegTblOS_TASK_REG_TBL_SIZE;#endif OS_TCB;2022-12-728任务控制块结构的主要成员

    16、2022-12-729任务控制块OS_TCB中几个成员的算法2022-12-730任务控制链表uC/OS-II用两条链表管理任务控制块l空任务块链表:其中所有任务控制块还为分配给任务l任务块链表:其中所有任务控制块已分配给任务2022-12-731为了加快对任务控制块的访问速度,uC/OS-II在uC/OS-II.H文件中还定义了一个数据类型为OS_TCB*的数组OSPrioTbl该数组以任务的优先级为顺序在各个元素里存放了指向各个任务控制块的指针删除一个任务,实质上就是把该任务的任务控制块从任务控制块链表中删除,并归还给空任务控制块链表2022-12-732任务控制块的初始化当应用程序调用函数OSTaskCreate()创建一个任务时,这个函数会调用系统函数OSTCBInit()来为任务控制块进行初始化INT8U OSTCBInit(INT8U prio,/任务优先级别OS_STK*ptos,/任务堆栈栈顶指针OS_STK*pbos,/任务堆栈栈底指针INT16U stk_size,/任务的标识符void*pext,/任务堆栈的长度INT16U opt/任务控制块的选择项);2022-12-733该函数主要任务l为被创建任务从空任务控制块链表获取一个任务控制块l用任务的属性对任务控制块各个成员进行赋值l把这个任务控制块链入到任务控制块链表2022-12-734

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第三章11进程描述和状态控制课件.ppt
    链接地址:https://www.163wenku.com/p-4414813.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


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

    163文库