工具与软件:
我有一个应用使用修改版本的 LWIP 和 IPC 消息在 DSP 和 CPU1之间进行通信。
当接收到 UDP 数据包时、将执行以下序列:
-
转发到 CPU1:
- 使用将包含 UDP 数据包数据的 IPC 消息发送到 CPU1
IPC_sendCommand(IPC_CM_L_CPU1_R, IPC_FLAG0, IPC_ADDR_CORRECTION_ENABLE, IPCTOCPU_PROTO_PCK, (uint32_t)packetData, (uint32_t)pckLength);
IPC_waitForAck(IPC_CM_L_CPU1_R, IPC_FLAG0);
调用以等待 CPU1的确认。
- 使用将包含 UDP 数据包数据的 IPC 消息发送到 CPU1
-
CPU1处理:
- CPU1处理接收到的数据包。
-
正在发送来自 CPU1的响应:
- CPU1使用向 CM 发送响应
IPC_sendCommand(IPC_CPU1_L_CM_R, IPC_FLAG1, IPC_ADDR_CORRECTION_ENABLE, IPCTOCM_PROTO_PCK, (uint32_t) packetDataTx, nByte);
IPC_waitForAck(IPC_CPU1_L_CM_R, IPC_FLAG1);
被调用以等待 CM 的确认。
- CPU1使用向 CM 发送响应
问题:
代码间歇性进入循环、由汇编指令指示:
F24D0004 movw r0, #0xd004
00001628: F2C4000F movt r0, #0x400f
0000162c: 6800 ldr r0, [r0]
0000162e: 0840 lsrs r0, r0, #1
00001630: D3F8 blo #0x1624
根据数据表、0x400fd004对应于 IPC 配置寄存器。 此循环似乎与IPC_waitForAck()
函数相关联:
static inline void IPC_waitForAck(IPC_Type_t ipcType, uint32_t flag) {
while((IPC_Instance[ipcType].IPC_Flag_Ctr_Reg->IPC_FLG & flag) != 0U) {
// Wait for flag to be cleared
}
}
其中、#define IPC_FLAG0 0x00000001U
用于从 CM 到 CPU1的以太网消息的标志是什么。
删除两个IPC_waitForAck()
呼叫未解决问题。
您能否提供有关对此问题进行故障排除的指导? 如果需要、我可以通过私人消息共享相关的代码片段。