是否有一种方式以编程方式更改Contiki中的堆栈大小?
我知道在Linux系统上我可以调用:
ulimit -s SIZE但是我目前正在使用Contiki作为一个闪烁的二进制文件,并且没有真正的访问传统终端的权限。我尝试使用system()和popen()调用执行C中的命令,但没有效果。
也许我可以利用CFLAG或LDFLAG?或者修改makefile中的什么东西?
我正在将二进制文件闪烁到德州仪器公司的cc2650,它有一个32位处理器。
发布于 2018-07-27 13:42:40
CC2650没有MPU (内存保护单元),这意味着在运行时没有人检查堆栈区域的边界,这反过来意味着没有办法“保留”堆栈,就像在Linux上保留堆栈内存一样。
本质上,如果您继续在堆栈上分配新的东西,那么即使到达其他内存区域(通常是.data区域),堆栈也会继续增长,该区域包含动态分配的内存(如果有的话)和静态/全局变量。堆栈的增长将以一种甚至可能没有注意到的方式破坏这些其他区域的内存,从而导致难以找到的bug。
有几件事要做。一个是在编译期间保留更大的堆栈内存。这将不会限制堆栈区域,但将限制数据区域的范围。为此,请在CC2650中更改cpu/cc26xx-cc13xx/cc26xx.ld链接器脚本
_Min_Stack_Size = 0x100; /* 256 bytes by default for the stack */另一件事是使用康蒂基最近的修订版,这些版本有内置的堆栈溢出检查。运行时仍无法更改堆栈区域大小,但如果发生堆栈溢出,则会出现错误。
https://stackoverflow.com/questions/51490588
复制相似问题