【问题标题】:Stack Base Memory Address堆栈基内存地址
【发布时间】:2015-04-18 00:38:18
【问题描述】:

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

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

【问题讨论】:

  • 这个问题没有通用答案,因为它取决于您使用的启动代码。这定义了堆栈区域,并且可能还导出了一个带有地址的全局符号。
  • 看来你是对的。我通过引用链接器脚本变量找到了解决方案。将很快发布我的解决方案作为答案。

标签: gcc arm embedded cortex-m


【解决方案1】:

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

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

然后可以使用 C 代码访问链接描述文件变量

extern uint32_t __stack;

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

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2012-11-02
    • 2010-12-14
    • 2015-04-11
    • 2017-02-24
    相关资源
    最近更新 更多