在Contiki中更改堆栈大小

时间:2018-07-24 04:43:07

标签: contiki

有没有办法在Contiki中以编程方式更改堆栈大小?

我知道我可以在Linux系统上打电话:

ulimit -s SIZE

但是我目前正在使用Contiki作为闪存二进制文件,并且实际上没有访问传统终端的权限。我尝试使用system()popen()调用从C执行命令无济于事。

也许我可以利用CFLAG或LDFLAG?或修改Makefile中的内容?

仅供参考,我正在将二进制文件刷新到具有32位处理器的Texas Instruments cc2650。

1 个答案:

答案 0 :(得分:0)

CC2650没有MPU(内存保护单元),这意味着没有人在运行时检查堆栈区域的边界,这又意味着没有办法以相同的方式“保留”堆栈堆栈内存是在Linux上保留的。

从本质上讲,如果您继续在堆栈上分配新内容,即使堆栈到达其他内存区域(通常是.data区域,该区域包含动态分配的内存,如果有的话)以及静态/全局内存,堆栈也将继续增长。变量。堆栈的增长将以您甚至可能不会注意到的方式破坏其他区域的内存,从而导致难以发现的错误。

有几件事情要做。一种是在编译时保留更大的堆栈内存。此不会限制堆栈区域,但是 会限制数据区域的范围。为此,请在cpu/cc26xx-cc13xx/cc26xx.ld中更改CC2650链接器脚本:

_Min_Stack_Size = 0x100;  /* 256 bytes by default for the stack */

另一件事是使用Contiki-NG最近的修订,这些修订具有内置的stackoverflow检查。在运行时仍无法更改堆栈区域的大小,但是如果发生堆栈溢出,您将得到一个错误。