我遇到了一个硬故障问题,它出现在看似随机的时间,其中一个指针指向地址 A5 或 FF(我允许的内存空间远低于 80000000 及以上的内存空间)。这两个值似乎总是同一个指针。
我正在使用运行 STM32F205RE 处理器的嵌入式系统,该处理器与发生此错误的名为 cg2900 的 fm/蓝牙/gps 芯片通信。
使用调试器,我可以看到在几次测试运行期间指针分别指向地址 A5 和 FF。然而,它似乎是随机发生的,有时我可以运行测试一个小时而不会失败,而其他时候它会崩溃 20 秒。
我正在运行 freeRTOS 作为调度程序,以在可能会以某种方式干扰的不同任务(一个用于无线电,一个用于蓝牙,一个用于其他定期维护)之间切换。
这可能是什么原因?由于它正在运行自定义硬件,因此不能排除这是硬件问题(可能)。关于如何解决问题的任何指示(没有双关语)?
编辑:
经过进一步调查,它崩溃的地方似乎是非常随机的,而不仅仅是那个特定的指针。我使用硬故障处理程序来获取这些寄存器的以下值(所有值均为十六进制):
崩溃前的半长跑(分钟):
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
崩溃前很短的运行时间(秒):
R0 = 40026088
R1 = fffffff1
R2 = cb3
R3 = 1
R12 = 34d
LR [R14] = 40026088 subroutine call return address
PC [R15] = a5a5a5a5 program counter
PSR = fffffffd
BFAR = e000ed38
CFSR = 100
HFSR = 40000000
DFSR = 0
AFSR = 0
SCB_SHCSR = 0
另一个短的(秒):
R0 = 0
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 = 1
HFSR = 40000000
DFSR = 0
AFSR = 0
SCB_SHCSR = 0
经过很长时间(1小时+):
R0 = e80000d0
R1 = fffffffd
R2 = 20000400
R3 = 2000877c
R12 = 7
LR [R14] = 200000c8 subroutine call return address
PC [R15] = 1010101 program counter
PSR = 8013d0f
BFAR = 200400d4
CFSR = 8200
HFSR = 40000000
DFSR = 0
AFSR = 0
SCB_SHCSR = 0
似乎大部分时间都在同一点崩溃。我根据之前的建议调整了内存,但我似乎仍然有同样的问题。
谢谢你的时间!
亲切的问候