第三进程描述和状态控制.pptVIP

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统操作系统 吴国伟 wgwdut@dlut.edu.cn 大连理工大学软件学院 第三章 任务管理 3.1.1 任务基本概念 从代码上看,uC/OS-II任务就是一个函数 uC/OS-II任务有两种:用户任务和系统任务 从任务的存储结构上看,uC/OS-II由三部分组成: 任务程序代码(函数):任务的执行部分 任务堆栈:用来保存任务的工作环境 任务控制块:记录任务的各个属性 3.1.2 任务的状态 uC/OS-II中任务有5中状态 睡眠状态:任务只是以代码的形式驻留在程序空间(ROM或RAM),还没有交给操作系统管理时的情况叫做睡眠状态。即任务在没有被分配任务控制块或者被剥夺了任务控制块时的状态叫做睡眠状态。 就绪状态:如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件这时任务的状态叫做就绪状态 运行状态:处于就绪态的任务如果经调度器判断获得了CPU的使用权,进入运行状态。 等待状态:正在运行的任务需要等待一段时间或需要等待一个事件发生在运行时,该任务就把CPU的使用权让给其他任务,进入等待状态 中断服务状态:一个正在运行的任务一旦响应中断请求就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态。 状态间的切换 3.1.3 用户任务代码一般结构 无限循环结构 void mytask(void *pdata) { for (;;) { 可以被中断的用户代码; OS_ENTER_CRITICAL();//进入临界段(关中断) 不可以被中断的用户代码; OS_EXIT_CRITICAL(); //退出临界段(开中断) 可以被中断的用户代码; } } OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()是uC/OS-II定义的两个宏。分别封装了关中断代码和开中断代码 用户应用程序一般结构 void Mytask1(void *pdata) //定义用户任务1 { for(;;) {...... }} void Mytask2(void *pdata) //定义用户任务2 { for(;;) { ...... }} void main() { .... OSInit(); //初始化uc/os ... OSTaskCreate(Mytask1,......); //创建用户任务1 OSTaskCreate(Mytask2,....);//创建用户任务2 .... OSStart(); //启动uc/os } 3.1.4 系统任务 uC/OS-II预定义了两个系统任务:空闲任务和统计任务 空闲任务是每个应用程序必须使用的 统计任务是应用程序可以根据实际需求来选择使用的 1.空闲任务 任务在系统中可以有5种状态,即系统极有可能会在某个时间内无用户任务可运行而处于所谓空闲状态。 为了使CPU在没有用户任务可执行时有事可做,uC/OS-II提供了一个叫做空闲任务OSTaskIdle()的系统任务。 代码如下: void OSTask(void*pdata) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; //防止某些编译器报错 for(;;) { OS_ENTER_CRITICAL(); //关闭中断 OSdleCtr++; //计数 OS_EXIT_CRITICAL(); //开中断 } } 2.统计任务 该任务每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便其他应用程序了解CPU的利用率。 是否使用统计任务,用户可以根据应用程序的实际需求来进行选择。 3.1.4 任务堆栈 为了满足任务切换和响应中断时保存CPU寄存器中的内容及任务调用其他函数时的需要,每个任务都有自己的堆栈 所有uC/OS-II任务的控制块中都含有一个指向该任务堆栈的指针 任务堆栈的创建 为了定义任务堆栈的方便,在文件OS_CPU.H中专门定义了一个数据类型OS_STK: typedef unsigned int OS_STK; //该类型长度为16位 在定义任务堆栈的栈区时,只要定义一个OS_STK类型的数组即可。如: #define TASK_STK_SIZE 512 //定义堆栈长度(1024) OS_STK TaskStk[TASK_STK_SIZE] //定义数组作为任务堆栈 当调用OSTaskCreate()来创建一个任务时,把数组的指针传递给函数OSTaskCreate()中的

文档评论(0)

118books + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档