首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

μC/OS-II任务栈处理的改进设计 01

μC/OS-II任务栈处理的改进设计 01

已经有不少的文章介绍了有关μC/OS-II这个实时内核及其应用。在很多的处理器上,μC/OS-II都得到了应用。μC/OS-II是一种源码公开、可移植、可固化、可裁减、可剥夺的实时多任务操作系统。特别适用于用户任务较多,而对实时性要求较严格的场合。

  μC/OS-II内核是一个占先式内核,用户视任务的轻重缓急不同赋予任务不同的优先级。一般来说,用户任务的实时性要求越高,则应赋予的优先级也越高;对那些要求不甚严格的任务,赋予的优先级应低一些。对突发事件,像A/D采样后的数据读取等,则应采用中断,实时响应,因而,中断享有最高的优先级。优先级高的任务在进行调度时,优先得到资源,因而能及时进入运行态运行;优先级低的得不到资源而进入就绪态,等待下一次任务调度。由于任务优先级的唯一性,μC/OS-II内核能在不同任务间井然有序地调度运行。

  μC/OS-II内核的功能强大,提供了用于共享资源的信号灯,用于进程通信的消息队列和邮箱等,是一个比较全面的系统。但有些地方仍然值得改进,比如该系统不支持时间片的任务调度,因而一旦任务进入了死循环,调度程序无法调度,其它的任务也就得不到及时运行处理。解决的方法也很简单,只要在定时中断服务程序中调用函数OSIntCtxSw()即可。

  μC/OS-II内核的另外一个值得改进的地方是它的堆栈处理。为了确保运行的安全可靠,μC/OS-II内核将每个任务的堆栈空间都按最大化处理,结果导致RAM的需求变大,往往还需外扩RAM,而浪费过多。下面详细讨论如何改进μC/OS-II内核的堆栈结构设计。

1 μC/OS-II的堆栈结构

  在堆栈的处理上,μC/OS-II为每个任务分配一个独立的堆栈,堆栈空间按任务中最大需求进行分配。这种方法可保证程序可靠运行,但却是以浪费大量的空间为代价。对一些小系统来说,没有扩展外部RAM,内部RAM相当小,RAM的空间利用就非常重要了。下面就来探讨如何改进μC/OS内核,以达到减少任务栈的内存需求。

  在μC/OS-II中,每个任务都定义了一个独立的堆栈空间,这个堆栈空间用来存放任务的相关信息,具体包括以下几个部分(如图1所示):
◆ 任务中定义的局部变量及被调用函数可能在栈上分配的局部变量;
◆ 任务中各个函数的返回地址;
◆ 发生中断时需要保存的上下文;
◆ 中断嵌套时需要保存的上下文。
返回列表