Базовый адрес памяти стека

Есть ли простой способ найти базовый указатель стека программно? Я кодирую микроконтроллер STM32F4 и компилирую с помощью компилятора arm-none-eabi-gcc.

Когда я использовал компилятор Arm C в комплекте с Keil uVision 5, я мог использовать функцию ABI __user_initial_stackheap() для получения базы стека, но, похоже, это не работает с gcc.


person KLing    schedule 18.04.2015    source источник
comment
на этот вопрос нет общего ответа, поскольку это зависит от того, какой код запуска вы используете. Это определяет область стека и, вероятно, также экспортирует глобальный символ с его адресом.   -  person mfro    schedule 18.04.2015
comment
Похоже, вы правы. Я нашел решение, сославшись на переменные сценария компоновщика. В ближайшее время опубликую свое решение в качестве ответа.   -  person KLing    schedule 24.04.2015


Ответы (1)


Это зависит от того, как настроены различные разделы памяти (обычно в сценарии компоновщика). Например, сценарий компоновщика для STM32F4 может определять базу стека как:

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

Затем переменные сценария компоновщика могут быть доступны в коде C с помощью

extern uint32_t __stack;

void foo() {
  uint32_t stack_base = &__stack;
}
person KLing    schedule 24.04.2015