- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 基于ARM9和μC/OS-II嵌入式系统设计 ;4.1 μC/OS-II的内核
多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。
UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。;4.1.1 μC/OS-II内核调度特点
μC/OS-II内核调度主要有如下特点:
● 只支持基于优先级的抢占式调度算法,不支持时间片轮训。
● 64个优先级,只能创建64???任务,用户只能创建56个任务。
● 每个任务优先级都不相同。
● 不支持优先级逆转。
● READY队列通过内存映射表实现快速查询。效率非常高。
● 支持时钟节拍。
● 支持信号量,消息队列,事件控制块,事件标志组,消息邮箱任务通讯机制。;● 支持中断嵌套,中断嵌套层数可达255层,中断使用当前任务的堆栈保存上下文。
● 每个任务有自己的堆栈,堆栈大小用户自己设定。
● 支持动态修改任务优先级。
● 任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态分配,释放内存。
● 任务堆栈为用户静态或者动态创建,在任务创建外完成,任务创建本身不进行动态内存分配。
● 任务的总个数(OS_MAX_TASKS)由用户决定。
● 0优先级最高,63优先级最低;
● 有一个优先级最低的空闲任务,在没有用户任务运行时运行。;4.1.2 任务控制块 OS_TCB描述
UC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。减少动态内存分配和释放。因为依靠优先级进行TCB分配,每个任务必须有自己的优先级,不能和其他任务具有相同的优先级。; #if ((OS_Q_EN (OS_MAX_QS = 2)) || OS_MBOX_EN || OS_SEM_EN)
OS_EVENT *OSTCBEventPtr;
#endif
#if ((OS_Q_EN (OS_MAX_QS = 2)) || OS_MBOX_EN)
void *OSTCBMsg;
#endif
INT16U OSTCBDly;
INT8U OSTCBStat;
INT8U OSTCBPrio;
INT8U OSTCBX; ; INT8U OSTCBY;
INT8U OSTCBBitX;
INT8U OSTCBBitY;
#if OS_TASK_DEL_EN
BOOLEAN OSTCBDelReq;
#endif
} OS_TCB;;其中:
OSTCBStkPtr是指向当前任务栈顶的指针。
*OSTCBExtPtr是任务扩展模块使用;
*OSTCBStkBottom指向任务堆栈栈底的指针;
OSTCBStkSize存有栈中可容纳的指针元数目;
OSTCBOpt把“选择项”传给函数OSTashCreaktExt( )。只有当用户将 OS_CFG.H 文件中的OS_TASK_CREATE_EXT设为1时,这个变量才有效;
OSTCBId用于存储任务的识别码(ID)。这个变量现在没有用,保留给将来扩展用;;OSTCBNext和OSTCBPrev用于任务控制块OS_TCBs的双向链表的前后链接,该链表在时钟节拍函数OSTimerTick( )中使用;
OSTCBEventPtr是指向事件控制块的指针;
OSTCBMsg是指向传给任务的消息的指针;
OSTCBDly当需要把任务延时若干时钟节拍时要用到这个变量,或者需要把任务挂起一段时间以等待某事件的发生;
OSTCBStat是任务的状态字;
OSTCBPrio是任务优先级,高优先级任务的OSTCBPrio值小;;OSTCBDelRe
文档评论(0)