Other Parts Discussed in Thread: AM2434
器件型号: AM2434
您好:
我正在使用 AM2434 从 ind_comms_sdk_am243x_11_00_00_08 运行 FreeRTOS。 在其中一个 R5 内核上、我得到了大约 50%的情况下第一个上下文切换发生了数据中止、这恰好是计时器任务。
我已经读出相应的寄存器:
- DFAR:0x00000000
- DFSR:0x00001C06
根据故障寄存器 (https://developer.arm.com/documentation/ddi0460/c/System-Control/Register-descriptions/Fault-Status-and-Address-Registers) 的文档、这似乎是异步外部中止。
发生中止时、始终发生在上下文切换结束时 RFEIA 指令执行期间。 这应该意味着、如果我向前推进 PC=7010ace4、I 最终会出现在数据中止处理程序中(在~50%的情况下)。 在此前进一步之后、我要么位于计时器任务函数中、要么位于数据中止的矢量表中。
vPortRestoreTaskContext():7010acb0: F102001F cps #0x1f7010acb4: E59F01C8 ldr r0, [pc, #0x1c8]7010acb8: E5901000 ldr r1, [r0]7010acbc: E591D000 ldr r13, [r1]7010acc0: E59F01C0 ldr r0, [pc, #0x1c0]7010acc4: E49D1004 pop {r1}7010acc8: E5801000 str r1, [r0]7010accc: E3510000 cmp r1, #07010acd0: 149D0004 popne {r0}7010acd4: 1CBD0B20 vpopne {d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15}7010acd8: 1EE10A10 vmsrne fpscr, r07010acdc: F57FF01F clrex 7010ace0: E8BD5FFF pop {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}7010ace4: F8BD0A00 rfeia r13!
这是一个异步外部中止、因此我假设实际触发器可能来自另一条指令、这条指令恰好是在流水线中同时执行的? 为此、我已经尝试将此任务的栈从外部 DDR 移动到 MSRAM、但没有成功。
什么原因可能导致此问题? 是否有任何额外的故障寄存器或类似的东西可以更详细地解释什么触发了此问题?