堆栈基址内存地址

Stack Base Memory Address

有没有一种简单的方法可以通过编程找到堆栈基址指针?我正在为 STM32F4 微控制器编码并使用 arm-none-eabi-gcc 编译器进行编译。

当我使用与 Keil uVision 5 一起打包的 Arm C 编译器时,我可以使用 ABI 函数 __user_initial_stackheap() 来检索堆栈基数,但这似乎不适用于 gcc。

这取决于不同内存部分的设置方式(通常在链接描述文件中)。例如,STM32F4 的链接描述文件可以将堆栈基定义为:

__stack = ORIGIN(RAM) + LENGTH(RAM);

然后可以使用

在C代码中访问链接描述文件变量
extern uint32_t __stack;

void foo() {
  uint32_t stack_base = &__stack;
}