我正在为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。
发布于 2011-03-23 01:54:51
GDB很高兴地给了你一些线索:
双重故障后
清除锁定
您的CPU处于locked状态。这意味着它不能运行它的“硬故障”中断处理程序(可能它的Vector中有一个0)。
我通常会在忘记“给帝国”通电时得到这些错误,由此产生的总线错误首先升级到“硬故障”,然后升级到锁定状态。应该在你的MCU手册中提到,顺便说一句。
https://stackoverflow.com/questions/4860977
复制相似问题