В руководстве пользователя LPC4088 (стр. 876) мы можем прочитал, что микроконтроллер LPC4088 имеет действительно необычную процедуру запуска:
Это выглядит как полная ерунда, и мне нужен кто-то, кто поможет мне разобраться... В мире ARM я бессчетное количество раз слышал, что векторную таблицу можно представить так:
reset: b _start
undefined: b undefined
software_interrupt: b software_interrupt
prefetch_abort: b prefetch_abort
data_abort: b data_abort
nop
interrupt_request: b interrupt_request
fast_interrupt_request: b fast_interrupt_request
точно в месте 0x00000000
в моем двоичном файле, но зачем нам это делать, если это место при загрузке затенено векторной таблицей загрузочного ПЗУ, которую даже нельзя изменить, поскольку она доступна только для чтения?! Итак, где мы можем разместить нашу собственную таблицу векторов? Я думал о том, чтобы поместить его в 0x1FFF0000
, чтобы он был перенесен в местоположение 0x00000000
при сбросе, но не могу этого сделать из-за области только для чтения...
Теперь ко второй части. ARM ожидает найти ровно 8 векторов в 0x00000000
, а при сбросе загрузочного ПЗУ проверяет, равна ли сумма 8 векторов нулю, и только если это верно, выполняется пользовательский код. Чтобы пройти эту проверку, нам нужно суммировать первые 7 векторов и сохранить их дополнение до 2 к последнему вектору, который является вектором для быстрых запросов на прерывание, находящихся в 0x0000001C
. Ну, это верно только в том случае, если ваш код выровнен по 4 байтам (кодировка ARM), но все еще верно, если ваш код выровнен по 2 байтам (кодировка Thumb), что имеет место со всеми ядрами Cortex-M4, которые могут выполнять только кодировку Thumb коды операций... Так почему же они прямо упомянули, что дополнение 2 к сумме должно быть равно 0x0000001C
, если это никогда не сработает с Cortex-M4. Является ли 0x0000000E
правильным адресом для сохранения дополнения 2?
И третья часть. Зачем загрузочному ПЗУ проверять, равна ли сумма первых 8 векторов нулю, если они уже находятся в загрузочном ПЗУ?! И доступны только для чтения!
Ты видишь, что здесь что-то странное? Мне нужно, чтобы кто-нибудь объяснил мне неясности в трех предыдущих абзацах...