UCOS II堆栈大小问题
手头在调试一个别人写的UCOS II任务代码,发现在一个任务中出现奇怪的情况。如果我在任务中多加入一段无关的代码,或者使任务中的某个计算变得更复杂一些,就会产生异常:某些存储在内存中的数据访问不正确。经过调试后发现,增大任务堆栈的大小,就不会出现异常。我对UCOS II不是很熟悉,但是根据以往使用OS的经验,当任务堆栈不够时,任务一般会死掉,或者出现其他告警。可是为什么UCOS II的任务在堆栈不够的情况下运行呢?
请各位大神赐教!不胜感激。 应该是看你在内存中对堆栈的分布吧。比如任务A的堆栈外就是数据段,那A堆栈越界会造成数据段被踩,如果数据段中没有类似程序指针之类的数据,代码一般也会正常运行,只是读数据时会有错。如果任务A的堆栈外是另一个挂起的任务B,那A堆栈越界会踩到任务B的堆栈,等任务B得到运行时就有可能崩溃,也有可能局部变量被改。如果任务A的堆栈外是未开始运的任务C的堆栈区,那A堆栈越界后如果任务C开始运行,就会把任务A的堆栈踩坏,等到任务A再运行时就可能崩溃。。。情况应该比较多。 UCOS不支持动态分配堆栈,就像数组和链表一样,所以如果空间富余尽量搞大一点 ucOs 的任务栈是线性连续分配的, 一个任务出现异常, 可能是其他相邻任务堆栈溢出后影响了本任务堆栈的数据.
异常情况也完全是随机, 不可预测的. airwill 发表于 2013-10-29 12:13
ucOs 的任务栈是线性连续分配的, 一个任务出现异常, 可能是其他相邻任务堆栈溢出后影响了本任务堆栈的数据. ...
堆栈的大小怎么计算比较好呢?
页:
[1]