请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5989 工具与软件:
我尝试 使用一个小函数 来确定我的应用程序在运行时使用了多少栈空间。
我遇到的一个重大问题是、当我读取 SP/R1时、这个值就没有意义了。 它返回报告>128k。 纵观所有32位、它显示的值远超过1M、这对于该器件是错误的、因为它具有128KB 的板载 FRAM。
相关的代码片段
```μ A
uint32_t get_SP_register (void)
{
uint32_t sp_value;
//使用`movx`指令处理大存储器模型中的20位寻址
__ASM____volatile__("movx.a sp,%0":"=r"(sp_value):"memory");
返回 sp_value 和0xFFFFF;
}
extern uint32_t _stack_start[];
void fill_stack_space()
{
uint32_t sp = get_SP_register ();
uint32_t fill_size = sp -(uint32_t)_stack_start;
logger.info("Stack 指针值:%lu 字节"、sp);
logger.info("Stack 启动:%lu 字节"、(uint32_t)_stack_start);
logger.info("fill 大小:%lu 字节"、fill_size);
}
```μ A
找到此示例
```μ A
.stack:
{
. = align (2);
_stack_start =.;/*定义堆栈的起始*/
. += STACK_SIZE;
_stack_end =.;/*定义堆栈的末尾*/
provide (__stack =.);
*(.stack)
}> HIFRAM
```μ A
在测试中、STACK_SIZE 等于40K
我使用大型内存模型并使用-os 进行编译
我不知道为什么堆栈指针会关闭这么多,但用任何已知值替换函数的返回值确实显示出我的记录器语句正确地输出了我返回的内容。