Ну я говорю, что даже до перемещения таблицы векторов прерывания во внешнюю память программа не доходит. Я ознакомился с примером, которым вы поделились. Реализовал у себя подобное:
uint8_t a = 0;
__attribute__((section(".extflash"))) void function_in_ext_flash(void)
{
a += 1;
}
int main(void)
{
...
Конфигурирую периферию
...
function_in_ext_flash();
}
Ну и да, функция во внешней флеш и все исполняется корректно:
Секцию extflash разметил в файле линковщика
zatim, Application Note на QSPI STM32 говорит, что по его адресному пространству можно исполняться, получается, что не надо копировать. Я лишь настраиваю Memory mapping, перед прыжком в область целевой программы (она же область QSPI), чтобы контроллер видел внешнюю QSPI флеш как внутреннюю. Так что да, я просто передаю управление регистру qspi. В целевой программе, я редактирую линкер скрипт, чтобы вся ее флеш была не внутренняя флеш контроллера ORIGIN = 0x0800 0000, SIZE = 2048, а внешняя ORIGIN = 0x9000 0000, SIZE = 8M, Также перед заходом в main() целевой прошивки переношу таблицу векторов по адресу 0x9000 0000, но это не влияет т.к. программа до этого момента не доходит.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Ну и да, функция во внешней флеш и все исполняется корректно:
Секцию extflash разметил в файле линковщика