有没有办法在Contiki中以编程方式更改堆栈大小?
我知道我可以在Linux系统上打电话:
ulimit -s SIZE
但是我目前正在使用Contiki作为闪存二进制文件,并且实际上没有访问传统终端的权限。我尝试使用system()
和popen()
调用从C执行命令无济于事。
也许我可以利用CFLAG或LDFLAG?或修改Makefile中的内容?
仅供参考,我正在将二进制文件刷新到具有32位处理器的Texas Instruments cc2650。
答案 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检查。在运行时仍无法更改堆栈区域的大小,但是如果发生堆栈溢出,您将得到一个错误。