- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
uC/OS-II实现原理新手入门
主要内容:1.任务相关部分以任务控制块(OS_TCB)为基础,讲述任务调度,任务管理,时间管理。2.任务间的通信和同步以事件控制块(ECB)为基础,讲述信号量、消息邮箱、消息队列。
任务相关部分1.任务状态2.任务控制块(OS_TCB)3.任务调度4.任务管理5.时间管理
正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态
OSTaskDel()OSFlagPost()OSMboxPost()OSMboxPostOpt()OSMutexPost()OSQPost()OSQPostFront()OSQPostOpy()OSSemPost()OSTaskResume()OSTimeDlyResume()OSTimeTick()OSTaskCreate()OSTaskCreateExt()OSTaskDel()OSStart()OSIntExit()OS_TASK_SW()OSFlagPend()OSMboxPend()OSMutexPend()OSQPend()OSSemPend()OSTaskSupend()OSTimeDly()OSTimeDlyHMSM()OSIntExit()OSTaskDel()
在uCOS中,每个任务都要对应唯一的任务控制块和任务堆栈。
指向当前任务堆栈栈顶的指针。任务控制块前后链表的链接指针。指向事件控制块的指针。指向传递给任务消息的指针。
任务的延时计数器。任务状态字。任务优先级。
任务就绪表使任务进入就绪状态:OSRdyGrp|=OSMapTbl[prio3];OSRdyTbl[prio3]|=OSMapTbl[prio3];使任务脱离就绪状态:If(OSRdyTbl[prio3]=~OSMapTbl[prio3])OSRdyGrp=~OSMapTbl[prio3];
找出进入就绪态的优先级最高的任务:y=OSUnMapTbl[OSRdyGrp];x=OSUnMapTbl[OSRdyTbl[y]];Prio=y3+x;
程序虚拟处理器PCSP虚拟处理器PCSP虚拟处理器PCSP虚拟处理器PCSP调度器多任务时任务与处理器之间关系的处理程序处理器PCSP在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境由操作系统的调度器按某种规则来进行这两个复制工作复制当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理器中复制当需要中止当前任务时,则把任务对应的虚拟处理器复制到内存复制再把另一个需要运行的任务的虚拟处理器复制到实际处理器中寄存器组寄存器组也就是说,任务的切换是任务运行环境的切换
任务调度器找出进入就绪态的优先级最高的任务
从OSTCBList开始,沿着OS_TCB链表遍历,一直到空闲任务为止。
μC/OS-II的初始化在使用μC/OS-II的所有服务之前,必须要调用μC/OS-II的初始化函数OSInit()对μC/OS-II自身的运行环境进行初始化。函数OSInit()将对μC/OS-II的所有的全局变量和数据结构进行初始化,同时创建空闲任务OSTaskIdle,并赋之以最低的优先级别和永远的就绪状态。如果用户应用程序还要使用统计任务的话(常数OS_TASK_STAT_EN=1),则OSInit()还要以优先级别为OS_LOWEST_PRIO-1来创建统计任务初始化函数OSInit()对数据结构进行初始化时,主要要创建包括空任务控制块链表在内的5个空数据缓冲区。同时,为了可以快速地查询任务控制块链表中的各个元素,初始化函数OSInit()还要创建一个数组OSTCBPrioTbl[OS_LOWEST_PRIO+1],在这个数组中,按任务的优先级别的顺序把任务控制块的指针存放在了对应的元素中
uCOS的启动
任务管理OSTaskCreat()OSTaskCreatExt()OSTaskDel()OSTaskDelReq()OSTaskChangePrio()OSTaskSuspend()OSTaskResume()OSTaskQuery()
文档评论(0)