基于arm9和μcosii嵌入式系统设计

基于arm9和μcosii嵌入式系统设计

ID:27659725

大小:601.00 KB

页数:130页

时间:2018-12-02

基于arm9和μcosii嵌入式系统设计_第1页
基于arm9和μcosii嵌入式系统设计_第2页
基于arm9和μcosii嵌入式系统设计_第3页
基于arm9和μcosii嵌入式系统设计_第4页
基于arm9和μcosii嵌入式系统设计_第5页
资源描述:

《基于arm9和μcosii嵌入式系统设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第4章基于ARM9和µC/OS-II嵌入式系统设计4.1µC/OS-II的内核4.2µC/OS-II的API函数4.3µC/OS-II的应用程序开发4.4µC/OS-II在S3C2410X上的移植4.5µC/OS-II的API应用4.6基于µC/OS-II操作系统的开发案例4.1µC/OS-II的内核多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增

2、加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。4.1.1µC/OS-II内核调度特点µC/OS-II内核调度主要有如下特点:●只支持基于优先级的抢占式调度算法,不支持时间片轮训。●64个优先级,只能创建64个任务,用户只能创建56个任务。●每个任务优先级都不相同。●不支持优先级逆转。●R

3、EADY队列通过内存映射表实现快速查询。效率非常高。●支持时钟节拍。●支持信号量,消息队列,事件控制块,事件标志组,消息邮箱任务通讯机制。●支持中断嵌套,中断嵌套层数可达255层,中断使用当前任务的堆栈保存上下文。●每个任务有自己的堆栈,堆栈大小用户自己设定。●支持动态修改任务优先级。●任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态分配,释放内存。●任务堆栈为用户静态或者动态创建,在任务创建外完成,任务创建本身不进行动态内存分配。●任务的总个数(OS_MAX_TASKS)由用户决定。●0优先级最高,63优先级最低;●有一个

4、优先级最低的空闲任务,在没有用户任务运行时运行。4.1.2任务控制块OS_TCB描述UC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。减少动态内存分配和释放。因为依靠优先级进行TCB分配,每个任务必须有自己的优先级,不能和其他任务具有相同的优先级。typedefstructos_tcb{OS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_EN>0void*OSTCB

5、ExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endifstructos_tcb*OSTCBNext;structos_tcb*OSTCBPrev;#if((OS_Q_EN&&(OS_MAX_QS>=2))

6、

7、OS_MBOX_EN

8、

9、OS_SEM_EN)OS_EVENT*OSTCBEventPtr;#endif#if((OS_Q_EN&&(OS_MAX_QS>=2))

10、

11、OS_MBOX_EN)void*OSTCBMsg;#endi

12、fINT16UOSTCBDly;INT8UOSTCBStat;INT8UOSTCBPrio;INT8UOSTCBX;INT8UOSTCBY;INT8UOSTCBBitX;INT8UOSTCBBitY;#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;#endif}OS_TCB;其中:OSTCBStkPtr是指向当前任务栈顶的指针。*OSTCBExtPtr是任务扩展模块使用;*OSTCBStkBottom指向任务堆栈栈底的指针;OSTCBStkSize存有栈中可容纳的指针元数目;OSTCBOpt把“选择项”传给函数OS

13、TashCreaktExt()。只有当用户将OS_CFG.H文件中的OS_TASK_CREATE_EXT设为1时,这个变量才有效;OSTCBId用于存储任务的识别码(ID)。这个变量现在没有用,保留给将来扩展用;OSTCBNext和OSTCBPrev用于任务控制块OS_TCBs的双向链表的前后链接,该链表在时钟节拍函数OSTimerTick()中使用;OSTCBEventPtr是指向事件控制块的指针;OSTCBMsg是指向传给任务的消息的指针;OSTCBDly当需要把任务延时若干时钟节拍时要用到这个变量,或者需要把任务挂起一段时间以等待某

14、事件的发生;OSTCBStat是任务的状态字;OSTCBPrio是任务优先级,高优先级任务的OSTCBPrio值小;OSTCBDelReq是一个布尔量,用于表示该任务是否需要删除;OSTCBX

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。