Почему Cortex-M3 сбрасывается на адрес 0 в GDB? - PullRequest
2 голосов
/ 01 февраля 2011

Я создаю кросс-компиляцию инструментария для чипа Stellaris LM3S8962 cortex-m3.Тестовое приложение C ++, которое я написал, будет выполнено в течение некоторого времени, после чего произойдет сбой.Ошибка возникнет, когда я попытаюсь получить доступ к устройству с отображенной памятью.На данный момент моя рабочая гипотеза заключается в том, что в моей последовательности запуска отсутствует какая-то необходимая инициализация чипа.

Я хотел бы понять, почему выполнение в 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 Ответ

4 голосов
/ 22 марта 2011

GDB с радостью дал вам подсказку:

очистка блокировки после двойной ошибки

Ваш процессор был в заблокирован состоянии. Это означает, что он не может запустить свой обработчик прерываний «Hard Fault» (возможно, в его векторе 0).

Обычно я получаю их, когда забываю «подать питание» на периферию, в результате ошибка шины сначала переходит в «Hard Fault», а затем в заблокированное состояние. Следует упомянуть в руководстве к вашему MCU, кстати.

...