堆栈基址内存地址
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;
}
有没有一种简单的方法可以通过编程找到堆栈基址指针?我正在为 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;
}