在 Contiki 中更改堆栈大小

Change Stack size in Contiki

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

我知道在 Linux 系统上我可以呼叫:

ulimit -s SIZE

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

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

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

CC2650没有MPU(内存保护单元),这意味着在运行时没有人检查堆栈区域的边界,这反过来意味着没有办法"reserve"堆栈进去在 Linux.

上保留堆栈内存的意义相同

本质上,如果你继续在堆栈上分配新的东西,堆栈将继续增长,即使它到达其他内存区域 - 通常是 .data 区域,它包含动态分配的内存,如果有的话,和 static/global变量。堆栈的增长会以一种您甚至可能没有注意到的方式破坏其他区域的内存,从而导致难以发现的错误。

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

中的 CC2650 链接描述文件
_Min_Stack_Size = 0x100;  /* 256 bytes by default for the stack */

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