[发明专利]一种嵌入式操作系统中切换任务的方法和单元无效
| 申请号: | 200810114321.9 | 申请日: | 2008-06-03 |
| 公开(公告)号: | CN101290590A | 公开(公告)日: | 2008-10-22 |
| 发明(设计)人: | 艾国 | 申请(专利权)人: | 北京中星微电子有限公司 |
| 主分类号: | G06F9/48 | 分类号: | G06F9/48 |
| 代理公司: | 北京安信方达知识产权代理有限公司 | 代理人: | 栗若木;王漪 |
| 地址: | 100083北京市*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 嵌入式 操作系统 切换 任务 方法 单元 | ||
技术领域
本发明涉及嵌入式操作系统,尤其涉及一种嵌入式操作系统中切换任务的方法和单元。
背景技术
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器browser等。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
中断是指由于某个事件的发生,CPU暂停当前正在执行的其它程序,转而执行处理该事件的一个程序。该事件的程序执行完成后,CPU接着执行被暂停的程序,这个过程称为中断。根据中断源的位置,有两种类型的中断:有的中断源在CPU的内部,称为内部中断。大多数的中断源在CPU的外部,称为外部中断。根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。有了这种中断机制,CPU才能有条不紊地“同时”完成多个任务,中断机制实质上帮助CPU提高了并发“处理”能力。
任务上下文是指任务切换要保存的数据,也叫上下文,简单地说,一个任务可看作一个运行中的C函数。对于抢先式RTOS(实时操作系统)来说,在任务切换时,应保存当前任务的各种现场数据。现场数据包括局部变量、各个CPU寄存器、堆栈指针和程序被中止的任务指针。CPU寄存器是任何任务代码均会用到的;而局部变量,一般的编译器是将其它安排在堆栈空间中,堆栈指针也是各任务共用的,所以也需要保存。而对于全局变量,由于一般 是在内存中的固定位置,各任务所占用的空间完全独立,所以不需要保存。
变量在堆栈中的位置,一般编译器中,对于一个存在函数调用嵌套的C程序来说,大部分编译器将传递的参数和函数本身的局部变量放在了堆栈中,编译器会自动生成压栈(push)和弹栈(pop)代码,以保存上级函数的运行寄存器。假设函数main()调用test1(),而test1()调用test2(),则在执行test2()中的代码时,堆栈映像如图1所示(ARM CPU的情况)。对于RTOS系统,堆栈中的各种数据就是一个任务的现场。一般CPU的堆栈指针SP只有一个,在进行任务切换时,必须将挂起任务所使用的堆栈内容保存起来,以便使该任务在下次唤醒时能从原地继续运行。
在现有技术中,为了保存任务堆栈中的数据,为每个任务定义一个数组变量作为堆栈,在任务切换时,将CPU堆栈指针SP指向当前运行的任务对应的数组中的某个元素,即栈顶,如图2所示。而各任务的堆栈空间都是预留好的。
在图2中,为每个任务定义一个数组变量作为堆栈,数组的大小一般根据可能出现的任务需要的最大堆栈来分配,任务所需的最大堆栈一般很难确定,一般根据经验值来确定,而且堆栈要确保不能溢出,一旦溢出就很麻烦,因此在实际中每个任务需要分配比实际大很多的一个堆栈,这样每个任务的堆栈都会有浪费,一般在操作系统中任务的个数是比较多的,因此对于整个系统而言,存储资源的浪费就很明显。
发明内容
本发明要解决的技术问题是提供一种嵌入式操作系统中切换任务的方法和单元,能够节省任务堆栈占用的存储空间。
为了解决上述问题,本发明提供了一种嵌入式操作系统中切换任务的方法,包括:
将当前运行任务的现场数据保存在临时工作栈中;
任务切换时,确定所述当前运行任务的现场数据的大小N并记录,将所述临时工作栈中所述当前运行任务的现场数据存放在一个存储空间大小 至少等于N的堆栈中,记录该任务与该堆栈的对应关系。
进一步的,所述的方法还包括:
查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针的值。
进一步的,将待运行任务的现场数据存放到临时工作栈中后不释放堆栈的存储空间;
将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京中星微电子有限公司,未经北京中星微电子有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810114321.9/2.html,转载请声明来源钻瓜专利网。





