Я строю кросс-компиляцию инструмента для чипа Stortaris LM3S8962 cortex-m3. Записанное мной тестовое приложение C++ будет выполняться в течение некоторого времени, а затем - с ошибкой. Неисправность возникнет, когда я попытаюсь получить доступ к аппаратным устройствам с отображением памяти. В настоящее время моя рабочая гипотеза заключается в том, что я пропускаю некоторые основные инициализации чипа в моей последовательности запуска.Зачем cortex-m3 сбросить адрес 0 в gdb?
Что я хотел бы понять, почему выполнение в gdb будет остановлено, а счетчик программ будет установлен на 0? У меня есть векторная таблица в 0x0, но первое значение - указатель стека. Должен ли я оказаться в одном из обработчиков ошибок, которые я указываю в таблице векторов?
(gdb)
187 UARTSend((unsigned char *)secret, 2);
(gdb) cont
Continuing.
lm3s.cpu -- clearing lockup after double fault
Program received signal SIGINT, Interrupt.
0x00000000 in g_pfnVectors()
(gdb) info registers
r0 0x1 1
r1 0x32 50
r2 0xffffffff 4294967295
r3 0x0 0
r4 0x74518808 1951500296
r5 0xc24c0551 3259762001
r6 0x42052dac 1107635628
r7 0x20007230 536900144
r8 0xf85444a9 4166272169
r9 0xc450591b 3293600027
r10 0xd8812546 3632342342
r11 0xb8420815 3091335189
r12 0x3 3
sp 0x200071f0 0x200071f0
lr 0xfffffff1 4294967281
pc 0x1 0x1 <g_pfnVectors+1>
fps 0x0 0
cpsr 0x60000023 1610612771
Цепь основы основана на gcc, gdb, openocd.
не уверен, что компьютер равен нулю | 1, но посмотрите на этот реестр ссылок, это очень интересно. Я немного ржав на большом пальце2, обычный ARM с загрузкой инструкций с ручками будет проходить и инициализировать все указатели стека, хорошо ли вы инициализировали указатели стека или указатель стека подразумевает режим системы/пользователя? вы можете попробовать изменить все регистры ссылок. или если вы можете прочитать psr из gdb, прочитайте это и узнайте, в каком режиме вы находитесь. –