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 было externed, поэтому я сделал это так:

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 и заливать, но не могу устранить ошибку.


person Fiddling Bits    schedule 15.05.2020    source источник
comment
Вам нужно &END_STACK, компоновщик общается через адреса, сами символы не имеют значений   -  person Eugene Sh.    schedule 15.05.2020
comment
Проверьте это для получения дополнительной информации: stackoverflow.com/questions/8398755/   -  person Eugene Sh.    schedule 15.05.2020
comment
@EugeneSh. Вот и все. Большое Вам спасибо.   -  person Fiddling Bits    schedule 15.05.2020