打印

ucOSII任务堆栈的问题

[复制链接]
2775|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
成成|  楼主 | 2009-2-3 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我目前用STM32F103的片子,ucOSII移植成功,并能运行起来。编译环境是基于keil。由于这个片子的RAM只有20k,因此我不断的对ucOSII的组件进行裁减。
当我裁减到空闲任务的堆栈大小时,空闲任务的任务堆栈由原来的128字节修改为64字节,但是却发现编译后的RAM总体需求去减少了256字节。把堆栈大小修改32字节,编译后减少384字节,总是有4倍的关系。
这是为什么呢?在哪里还有多分配了内存?请各个帮忙指导一下。

相关帖子

沙发
db10| | 2009-2-3 16:16 | 只看该作者

...

你的程序里是内似OS_STK task0_stack[100]的吧?
然而OS_STK 是4个字节的typedef INT32U         OS_STK;
所以改动后是4倍的关系。你仔细看看你程序,是会发现的。

如果你没有改动过,操作系统的原来就是根据32位机定义的4个字节。除非你改动他OS_STK。。。

使用特权

评论回复
板凳
成成|  楼主 | 2009-2-4 15:38 | 只看该作者

非常感谢

^_^,非常感谢db10!找到问题所在,确实如此。

另外我想问,空闲任务、统计任务的堆栈最小能够设置为多少?

使用特权

评论回复
地板
db10| | 2009-2-5 14:18 | 只看该作者

...

 一个任务的进程控制块需要68个字节左右,保护工作寄存器需要64字节,还有调用其它函数等等,因此一个任务至少需要140个字节以上的堆栈空间。 

 我是转的。

使用特权

评论回复
5
computer00| | 2009-2-5 14:26 | 只看该作者

PCB也要压栈的吗?应该是每个进程一个,独立的。

使用特权

评论回复
6
db10| | 2009-2-6 11:03 | 只看该作者

。。。

PCB不用压桟,占独立的内存空间,但是看到初始化时要占部分堆空间,就是定义的数据空间。

使用特权

评论回复
7
成成|  楼主 | 2009-2-9 15:57 | 只看该作者

呵呵,谢谢各位大侠的答复!

使用特权

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

本版积分规则

13

主题

56

帖子

0

粉丝