我试图在ARM Cortex-M3裸机上运行已编译的程序。在系统到达应用程序代码之前,奇怪的错误会导致程序计数器消失并出错。
在指令之前,寄存器被观察为:
<input onKeyPress={onEnter(doSomething)} />
以下说明名义上执行:
r0 0x0 0
r1 0x1 1
r2 0x0 0
r3 0x2 2
r4 0x18564 99684
r5 0x18418 99352
r6 0x0 0
r7 0x0 0
r8 0x8311 33553
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0xc84404 13124612
sp 0x7ffe0 0x7ffe0
lr 0x80df 32991
pc 0x8380 0x8380
正在读取的寄存器爆炸。它还以有效终止程序的方式发送程序计数器。
0x829c <__call_exitprocs+112>: ldmia.w sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}
我已经阅读了a similar issue on stack overfflow,但它似乎并不是我在这里面临的直接问题。 The ATMEL documentation for this board并未快速指定对一次读取的内部寄存器数量的限制。
关于这个问题的任何想法,如果可能的话,还有gcc的解决方法来阻止它?
答案 0 :(得分:2)
指令(及其效果)绝对正确。但是此指令之前的sp
值 是完全错误的。您的芯片在该地址上没有RAM内存。事实上 - 在这个地址可能根本就没有记忆。请参见手册第32页(带有存储器映射)。
您的sp
应位于SRAM中的某个位置,因此高于0x20000000
。您拥有的值 - 0x7ffe0
位于&#34;启动内存&#34;区域。如果您想找到问题,请找出sp
无效值的原因。