电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>uC/OS-II任务栈处理的一种改进方法

uC/OS-II任务栈处理的一种改进方法

2017-11-01 | rar | 0.4 MB | 次下载 | 1积分

资料介绍

关于μC/OS-II这个实时内核及其应用已经有很多文章介绍了,对于学习RTOS的人来说,这个系统是很好的学习起点。虽然文献[1]的源代码没有行号和函数名交叉索引表等,给源代码阅读造成一些困难(可使用BC31的grep查找功能,提高阅读效率),好在代码不是很长,前面又有详细的中文说明,对于有一定X86汇编C语言基础的人来说,仍然可以在不长的时间内掌握。
  μC/OS-II内核是一个抢先式内核,可以进行任务间切换,也可以让一个任务在得不到某个资源时休眠一定时间后再继续运行;提供了用于共享资源管理的信号灯,用于进程通信的消息队列和邮箱,甚至提供了存储器管理机制,是一个比较全面的系统。
  μC/OS-II内核有些地方仍然值得改进,比如该系统不支持时间片调度。如果有一个任务中一段死循环代码(或者条件循环代码),代码就会永远(或长时间)在此处执行,调度程序无法控制,其它任务也就是不到及时执行。这种抢先式实际上和非抢先式系统存在着同样问题。当然,如果这种代码不一个BUG,问题是可以解决的,在不提供时间片调度的抢先式系统中,一般采取信号灯,或者任务主动休眠的方法(对于μC/OS-II,很容易改造成支持时间片调度,只要在定时中断服务程序调用OSIntCtxSw()函数即可);非抢先式系统一般采取有限状态机方法,不使用这种耗时很长的循环代码。不过,无论如何,对RTOS的使用者来说,这毕竟会使得任务函数的编码不能随心所欲。
  uC/OS-II内核的另外一个值得改进的地方就是其任务栈管理方法。在μC/OS-II内核中,各个不同的任务使用独立的堆栈空间,堆栈的大小按每个任务所需要的最大堆栈深度来定义,这种方法可能会造成堆栈空间的浪费。下面讨论如何在RTOS中多个任务共用一段连续存储空间作为堆栈。
  1 任务切换要保存的数据
  简单地说,一个任务可看作一个运行中的C函数。对于抢先式RTOS来说,在任务切换时,应保存当前任务的各种现场数据。现场数据包括局部变量、各个CPU寄存器、堆栈指针和程序被中止的任务指针。CPU寄存器是任何任务代码均会用到的;而局部变量,一般的编译器是将其它安排在堆栈空间中,堆栈指针也是各任务公用的,所以也需要保存。 对于全局变量,由于一般是在内存中的固定位置,各任务所占用的空间完全独立,所以不需要保存。 在X86环境中,要保存的CPU寄存器共14个16位寄存器;通用寄存器8个(AX、BX、CX、DX、SP、BP、SI、BI)、段寄存器4个(CS、DS、ES、SS)以及指令指针IP和标志寄存器FR各1个。
  2 C编译器中变量在堆栈中的位置
  对于一个存在函数调用嵌套的C程序来说,大部分编译器将传递的参数和函数本身的局部变量放在了堆栈中,编译器会自动生成压栈(push)和弹栈(pop)代码,以保存上级函数的运行寄存器。 假设函数main()调用funl(),而funl()调用fun2(),则在执行fun2()中的代码时,堆栈映像如图1所示(X86 CPU的情况)。
  uC/OS-II任务栈处理的一种改进方法
  对于RTOS软件,堆栈中的各种数据就是一个任务的现场。一般CPU的堆栈指针SP只有一个,在进行任务切换时,必须将挂起任务所使用的堆栈内容保存起来,以便使该任务在下次唤醒时能从原地继续运行。
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费