打印
[ZLG-MCU]

关于多任务操作系统中变量保存的问题

[复制链接]
1819|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
crying_p|  楼主 | 2007-3-14 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设现在我有2个任务,任务1和任务2中所定义的都是局部变量,比如任务1中有1个10字节的数组需要填充,在传统的前后台系统中,当数据被填满进入任务2后,原有的任务1中的局部变量所占用的RAM空间被释放,那么在多任务操作系统中,假设填充到第五个字节的时候,任务1切换到了任务2,那么这个时候这10个字节的数据空间在任务切换过后是否被释放了呢?(假设我给任务1定义的这个数组为局部变量)举个例子,比如我要向任务1的数组内依次填充0-9这10个数,现在填充到4的时候,任务2抢占了CPU,任务切换了,那么当我执行完任务2再回到任务1中继续对后续数组内的数据进行填充,这时,以前填充过0-4的数组成员,它们里面存储的数据还是0-4吗?请DX指点

相关帖子

沙发
平常人| | 2007-3-14 11:29 | 只看该作者

任务的调度是不会改变任何任务的局部变量,除非那个任务

否则操作系统的任务调度就没有意义了。

使用特权

评论回复
板凳
crying_p|  楼主 | 2007-3-14 12:51 | 只看该作者

谢谢楼上的

那也就是说,只要任务不被DEL,它所定义的局部变量实际跟static定义的全局变量一样都会占用固定的RAM空间了,看来操作系统移植入MCU后所增加的RAM占用量不仅仅是操作系统建立需要占用的RAM空间以及各任务所占用的独立堆栈空间,还有各任务中本来在前后台系统中被调用后就自动释放的RAM空间,对RAM的占用看来不小哦。

使用特权

评论回复
地板
平常人| | 2007-3-16 22:53 | 只看该作者

局部变量与static定义的全局变量不同,它不一定占用固定RAM

实际上在很多系统中,局部变量被分配到堆栈中。

使用特权

评论回复
5
computer00| | 2007-3-17 01:14 | 只看该作者

晕死,使用操作系统又不是为了在让任务切换时节省内存

刚好相反,要增加内存的开销. 使用操作系统只是为了增加管理功能和通用功能,是以牺牲硬件的性能换来的。

否则做一个任务切换,原来任务的RAM空间被释放了,那原来的任务怎么办?在创建任务时要保存程序控制块,
并且在做任务切换时,要保存上下文,有些操作系统甚至要为每个任务花几百甚至上千的字节来保存这些东东。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

7

帖子

0

粉丝