打印

UCOS II堆栈大小问题

[复制链接]
5146|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Miltonliu2010|  楼主 | 2013-10-25 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手头在调试一个别人写的UCOS II任务代码,发现在一个任务中出现奇怪的情况。如果我在任务中多加入一段无关的代码,或者使任务中的某个计算变得更复杂一些,就会产生异常:某些存储在内存中的数据访问不正确。经过调试后发现,增大任务堆栈的大小,就不会出现异常。
我对UCOS II不是很熟悉,但是根据以往使用OS的经验,当任务堆栈不够时,任务一般会死掉,或者出现其他告警。可是为什么UCOS II的任务在堆栈不够的情况下运行呢?
请各位大神赐教!不胜感激。

相关帖子

沙发
JasonWangSE| | 2013-10-25 15:41 | 只看该作者
应该是看你在内存中对堆栈的分布吧。比如任务A的堆栈外就是数据段,那A堆栈越界会造成数据段被踩,如果数据段中没有类似程序指针之类的数据,代码一般也会正常运行,只是读数据时会有错。如果任务A的堆栈外是另一个挂起的任务B,那A堆栈越界会踩到任务B的堆栈,等任务B得到运行时就有可能崩溃,也有可能局部变量被改。如果任务A的堆栈外是未开始运的任务C的堆栈区,那A堆栈越界后如果任务C开始运行,就会把任务A的堆栈踩坏,等到任务A再运行时就可能崩溃。。。情况应该比较多。

使用特权

评论回复
板凳
zdhlixiang2006| | 2013-10-25 20:32 | 只看该作者
UCOS不支持动态分配堆栈,就像数组和链表一样,所以如果空间富余尽量搞大一点

使用特权

评论回复
地板
airwill| | 2013-10-29 12:13 | 只看该作者
ucOs 的任务栈是线性连续分配的, 一个任务出现异常, 可能是其他相邻任务堆栈溢出后影响了本任务堆栈的数据.
异常情况也完全是随机, 不可预测的.

使用特权

评论回复
5
fanxsd| | 2015-4-5 23:32 | 只看该作者
airwill 发表于 2013-10-29 12:13
ucOs 的任务栈是线性连续分配的, 一个任务出现异常, 可能是其他相邻任务堆栈溢出后影响了本任务堆栈的数据. ...

堆栈的大小怎么计算比较好呢?

使用特权

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

本版积分规则

20

主题

87

帖子

3

粉丝