arm-none-eabi-gcc (ошибка: элемент инициализатора не постоянный)
Я работаю над книгой " Архитектура встроенных систем " Даниэля Лакамеры. В главе 4, Процедура загрузки, мы создаем таблицу векторов прерываний (для ARM Cortex M4) следующим образом:
__attribute__ ((section(".isr_vector"))) void (* const ivt[])(void) =
{
(void (*)(void))END_STACK,
isr_reset,
// Other ISRs
};
Не было показано, как END_STACK
был extern
ed, поэтому я сделал это так:
extern uint32_t END_STACK;
Скрипт компоновщика похож на следующий:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 48K
}
END_STACK = ORIGIN(RAM) + LENGTH(RAM)
Я получаю следующую ошибку:
arm-none-eabi-gcc -c main.c interrupt_vector.c -O0 -g -mthumb -mcpu=cortex-m4 -ffreestanding
interrupt_vector.c:14:5: error: initializer element is not constant
(void (*)(void))END_STACK,
^
Как правильно с этим справиться? Можно ли преобразовать это в адрес функции, или я должен создать новый раздел исключительно для указателя стека?
Я пробовал окропить const
в extern
и приведите, но не может устранить ошибку.