工具/软件:Code Composer Studio
您好!
我很难发现堆栈在默认情况下仅为128个字、不是8字节对齐且根本不位于 RAMTOP。 TI 人为什么选择这种奇怪的布局?
根据我对堆栈的理解:
应该是合理的大(不是128个字)。 可能1/4的 RAM 将是一个良好的开端
-应该在8字节边界上(它在 ARM ABI 规范中的某处写入、如果它不是8字节对齐、它会中断 C 库中的浮点内容、这是很难找到的)
-不应位于我的变量中间的 BSS 内部、而应位于 RAMTOP (堆栈根据我的理解向下增长)。 这会产生一种有趣的效果、根据堆栈前面偶然出现的变量数量、对齐移位、打破8字节对齐规则和浮点运算会在随机基础上工作或不工作(也是很难找到的方法)
-应使用链接器脚本中定义的段正确初始化(从我现在看到的脚本完全被忽略、堆栈指针指向 pui32Stack、它是 BSS 中的一个变量
我不确定我们是否是这样创建了两个堆栈,不知道 libc 实际上是在哪里期望堆栈。 我假设 libc 使用链接器脚本中的引用、但我们在其他位置设置栈
有人能解释一下为什么以这种方式实施? 我从未在任何其他 ARM 平台(ST、NXP)上看到过它。 我仍然遇到神秘的崩溃、我将其归咎于奇怪的堆栈管理。
我将启动代码更改为"static uint32_t __attribute__(aligned (0x8))) pui32stack[32768];"以解决上述问题、但仍会崩溃。
Markus