部件号: AM2732
您好专家!
在开发 UDP 客户端时,我们发现了一个奇怪的问题:在连续发送大量数据时,数据包损坏。
我稍微修改了 mcuplus SDK 中的 enet_cpsw_udpclient 示例、复制了这个问题。
最重要的代码片段是在 app_udpclient.c 内部和函数 AppSocket_simpleClient 内部。
CacheP_wbInv(snd_buf, sizeof(snd_buf), CacheP_TYPE_ALLD);
ret = lwip_sendto(sock, snd_buf, sizeof(snd_buf), 0,
pAddr, sizeof(*pAddr));
// NOTE: THIS FIXES THE PROBLEM
// ClockP_usleep(10 * 1000);
通过取消对睡眠模式的注释、代码会产生预期的行为、即发送 1024 字节的 UDP 数据包、每个数据包具有交替模式(一次为 0xAA、一次为 0xBB)。
如果我没有睡眠、数据包会损坏、使得模式不再交替每个数据包、而是采用相同模式的数据包链。
附件您可以找到:
-项目来源
- Wireshark 捕获代码而不睡眠
- Wireshark 捕获的代码与睡眠
提前感谢
enet_cpsw_udpclient_am273x-evm_r5fss0-0_freertos_ti-arm-clang.zip
wireshark_captures.zip