ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
7 июля
222418 Топик полностью
dimasusl (17.11.2010 10:47, просмотров: 85) ответил Cepгeй Бopщ на Примерно так:
В общем, на форуме NXP мне объяснили где загвоздка. Фактически я пытался вызвать функцию через ее указатель. Чтобы этот код, скомпиленный в gcc, заработал на кортексе, нужно добавить следующее:  void (*fpBootloader)(void) = Bootloader; fpBootloader(); При этом, обязательный условием для корректного выполнения команды blx при вызове функции, является установленным в единицу бит 0 в адресе. Т.е., все хорошо сработает, если Bootloader = 0x00100001, в конкретном примере. Это я вычитал в доке "The-Definitive-Guide-to-the-ARM-Cortex-M3-2010", и потом подтвердили на форуме NXP. У меня теперь еще вопрос - а какие еще возможны варианты вызова функции? Обязательно ли вот так жестко указывать конкретный абсолютный адрес в флеше, или можно, например, описать некоторую секцию памяти и разместить ее там (а в дальнейшем использовать атрибут section)?