我遇到一个硬错误问题,它出现在看似随机的时间,指针指向地址A5或FF(我允许的内存空间远低于80000000及以上).它似乎总是与这两个值相同的指针.
我正在使用一个运行STM32F205RE处理器的嵌入式系统,它与一个名为cg2900的fm/bluetooth/gps芯片通信,发生此错误.
使用调试器我可以看到指针在几个测试期间分别指向地址A5和FF.然而,它似乎在随机时间发生,有时我可以运行测试一个小时而没有失败,而其他时间它崩溃20秒.
我正在运行freeRTOS作为调度程序来切换不同的任务(一个用于无线电,一个用于蓝牙,一个用于其他定期维护),这可能会以某种方式干扰.
这可能是什么原因?由于它正在运行自定义硬件,因此不能排除这是一个硬件问题(可能).关于如何调试问题的任何指针(没有双关语)?
编辑:
在进一步调查之后,似乎它在崩溃时非常随机,而不仅仅是那个特定的指针.我使用了一个hardfault处理程序来获取这些寄存器的以下值(所有值都以十六进制表示):
坠机前的半长跑(分钟):
R0 = 1
R1 = fffffffd
R2 = 20000400
R3 = 20007f7c
R12 = 7
LR [R14] = 200000c8 subroutine call return address
PC [R15] = 1010101 program counter
PSR = 8013d0f
BFAR = e000ed38
CFSR = 10000
HFSR = 40000000
DFSR = 0
AFSR = 0
SCB_SHCSR = 0
Run Code Online (Sandbox Code Playgroud)
在崩溃之前非常短暂(秒):
R0 = 40026088
R1 = fffffff1
R2 = cb3
R3 = 1
R12 = 34d
LR [R14] = 40026088 subroutine call …Run Code Online (Sandbox Code Playgroud)