- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式实时操作系统uCOS-II(就绪算法)解读
福州大学物理与信息工程学院 孙旭飞 任务控制块(TCB) μC/OS-II 是通过任务控制块来管理任务的,实际上创建任务就是给任务代码分派一个任务控制块。一旦使用OSTaskCreate()函数创建了一个任务,一个任务控制块OS_TCB就被复制了,OS_TCB全部驻留在RAM中,μC/OS-II最小内核的任务控制块的定义如右。 任务控制块(TCB) 任务控制块是一个基于链表的数据结构,任务控制块主要用于记录任务的堆栈栈顶指针、指向下一个任务控制块的指针、任务等待的延迟时间、任务的当前状态标志与任务的优先级别等一些与任务管理有关的属性。 所有的任务控制块分为两条链表,空闲链表和使用链表。 任务控制块(TCB) OSTCBStkPtr 指向当前任务堆栈的栈顶指针。μC/OS-II允许每个任务有自己的堆栈,而且每个任务堆栈的容量可以是任意大小的。OSTCBStkPtr是OS_TCB数据结构中的唯一能用汇编语言来处置的变量,OSTCBStkPtr放在数据结构的最前面,即数组的首元素,从而用汇编语言来处理这个变量非常容易(在偏移量为0的位置)。 任务控制块(TCB) OSTCBNext 用于任务控制块OS_TCB的链接。该链表在OSTimeTick( ) 时钟节拍函数中使用,用于刷新各个任务的任务延迟量OSTCBDly,每个任务的OS_TCB任务控制块在任务建立时就已经被链接到链表中了。 任务控制块(TCB) OSTCBDly 当需要将任务延时若干个时钟节拍时要用到这个变量,或者需要将任务挂起一段时间以等待某个事件的发生,这种等待是有超时限制的。在这种情况下,这个变量保存的是任务允许等待事件发生的最多时钟节拍。如果这个变量为0,表示任务不延时,或者表示等待事件发生的事件没有限制,即一直等待。 任务控制块(TCB) OSTCBStat 任务的状态字,用于存放任务的当前状态。当OSTCBStat为0时,任务就进入就绪态。当然μc/OS_II也可以给OSTCBStat赋其他的值,任务状态位OSTCBStat的定义详见程序清单 。 #define OS_STAT_RDY 0x00 /*运行准备就绪 */ #define OS_STAT_SEM 0x01 /*在信号量时挂起 */ #define OS_STAT_MBOX 0x02 /*在邮箱时挂起 */ #define OS_STAT_Q 0x04 /*在队列时挂起 */ #define OS_STAT_SUSPEND 0x08 /*任务被暂停 */ #define OS_STAT_MUTEX 0x10 /*在互斥信号量时挂起*/ #define OS_STAT_FLAG 0x20 /*在事件标志组时挂起*/ 任务控制块(TCB) OSTCBPrio 任务优先级。任务的优先级越高,则OSTCBPrio的值就越小。 任务控制块数组与指针 在μc/OS_II中定义了几个与任务控制块相关的数组和指针,μc/OS_II最小内核定义了一个数组、4个指针和一个指针数组,如下面程序清单。 OS_EXT OS_TCB *OSTCBCur; OS_EXT OS_TCB *OSTCBFreeList; OS_EXT OS_TCB *OSTCBHighRdy; OS_EXT OS_TCB *OSTCBList; OS_EXT OS_TCB *OSTCBPrioTbl[ OS_LOWEST_PRIO + 1 ]; OS_EXT OS_TCB *OSTCBTbl[ OS_MAX_TASKS + OS_N_SYS_TASKS ]; 任务控制块数组与指针 OSTCBTbl[ ] 用于分配任务控制块所需空间的数组,所有的任务控制块都保存在这个数组中。 uc/OS-II用2个链表来管理任务控制块的,一个是空任务块链表,另一个是任务控制块链表。空任务块链表是在调用函数OSInit( )对uc/OS-II进行初
文档评论(0)