第三章11进程描述和状态控制课件.ppt
- 【下载声明】
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
展开阅读全文