This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/SW-EK-TM4C1294XL:在 UDP 封包中获取垃圾数据

Guru**** 2614265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/777499/ccs-sw-ek-tm4c1294xl-getting-garbage-data-in-udp-packet

器件型号:SW-EK-TM4C1294XL

工具/软件:Code Composer Studio

大家好!

我正在学习 UDP 的实现。 我已经实现了 UDP 接收功能。 对于像"Hello"这样的小数据、控制器已成功接收到、但当我发送像"Prateek-Client-udp-Testing"这样的大字符串时、我会收到以下消息:

Prateek-Client-UDP-Testing▒BJ▒▒BJ▒▒BJ▒250:1900
St:urn:schema-UPnP:org: device:InternetGatewayDevice:1.
MAN:"SSDP:discover"
MX:3.

▒▒▒▒â"▒▒▒â"▒▒▒â"

我的回调函数如下:

void udp_recv_print (void *arg、struct udp_pcb * pcb、struct pbuf * p、struct ip_addr * addr、u16_t port){
     if (p!= NULL){
         UARTprintf ("接收到的数据--->%s\n"、p->PAYLOAD);
         pbuf_free (p);
     }



请建议一些解决方案以清除垃圾数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您可能需要检查 UART 波特率。 尝试增加波特率并查看它是否有用。 或者、如果您降低波特率、它会使它变得更糟糕吗? 如果通过改变 UART 波特率、则会在某种程度上有所不同、那么这就是波特率问题。 您的 UART 可能无法跟上传入的 UDP 数据包。 确保您的终端波特率与您的 MCU UART 波特率配置相匹配。 检查波特率的原因是、您说过您正在尝试发送一个大串的数据。 数据的大小以及发送数据的速度。


    请记住、UDP 协议不会对数据包执行任何错误检查。 使用 UDP 时、数据包只会发送给收件人。 发件人不会等待确保收件人收到数据包—它将继续发送下一个数据包。 如果收件人错过了某些 UDP 数据包、则不能再次请求这些数据包。 不能保证您获得所有数据包、如果您错过了数据包、则无法再次要求提供数据包。 您可能希望尝试 TCP、并查看您是否获得了不同的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回复。 我尝试更改 UART 波特率、但它没有帮助。 可能是因为我只是在屏幕上打印 p->PAYLOAD,而接收的数据速率非常低(~5秒)。 我怀疑打印 p->payload 的方法是错误的。 当我们查看 pbuf 数据结构时,有效载荷被定义为 void *payload。 因此、我使用 memcpy 将有效载荷的内容复制到消息数组中、如下所示:

    void udp_recv_print (void *arg、struct udp_pcb * pcb、struct pbuf * p、struct ip_addr * addr、u16_t port){
    if (p!= NULL){
    char meg[30]="";
    memcpy(msg, p->payload,p->len);
    UARTprintf ("接收到的数据--->%s\n"msg);
    pbuf_free (p);
    免费(msg);



    这对我来说很有用、现在更有意义了。 感谢你的帮助。