596142041 发表于 2021-8-26 10:10:41

F107+DP83848,lwip 1.3,发送数据,运行一段时间之后,数据发送异常

本帖最后由 596142041 于 2021-8-26 10:13 编辑

用的F107+DP83848,采用lwip,不带操作系统,使用组播,每间隔1s向上位机发送一次数据,运行一段时间之后,无数据输出,但是lwip并未报错,此时设备无法PING通,但是能接受上位机下发的数据;这会是什么原因导致的的啊以下是发送数据的函数,周期的调用UDP_send,通过打印,发现在multicast_send_data中的故障值一直返回的都是ERR_OK.
void UDP_Send(uint8_t *pdata, uint16_t tx_len)
{
   // memcpy(lwip_demo_buf, pdata, tx_len);
    multicast_send_data(pdata, tx_len);
}
/*
*********************************************************************************************************
*    函 数 名:
*    功    能:
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
void multicast_send_data(unsigned char *data, unsigned short len)
{
    err_t err;
      struct pbuf *Gpbuf =pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM);
    if(Gpbuf == NULL)
    {
#if DEBUG == 1
      printf("pbuf_alloc *p Null\r\n");
#endif
    }
    memcpy(Gpbuf->payload,data,len);//测试数据
    if (udp_server_multi_pcb != NULL)
    {
      err = udp_sendto(udp_server_multi_pcb, Gpbuf, (struct ip_addr *) (&ipgroup_send), UDP_MULTICASE_SEND_PORT);
                printf("Lwip Tx Data Len = %d,err = %d",len,err);
                Log_ENTER();
    }
    else
    {
               printf("udp_server_multi_pcb Null\r\n");
    }
      pbuf_free(Gpbuf);//此处注意,调试出现问题的原因是在此处没有及时未释放该指针
}

eric2013 发表于 2021-8-26 10:49:34

意思是刚开始是成功的,运行一会就不行了,无法成功发送UDP数据给上位机

596142041 发表于 2021-8-26 10:56:27

eric2013 发表于 2021-8-26 10:49
意思是刚开始是成功的,运行一会就不行了,无法成功发送UDP数据给上位机

是的,我在自己的开发板上面运行了6小时,都正常,在客户的板子上面测试,运行大概30分钟左右故障就出现

qq57379550 发表于 2021-8-26 14:21:01

请使用rtos配合lwip 效果更佳,不需要高速直接默认配置,跑几年都不会有问题

eric2013 发表于 2021-8-27 09:37:26

596142041 发表于 2021-8-26 10:56
是的,我在自己的开发板上面运行了6小时,都正常,在客户的板子上面测试,运行大概30分钟左右故障就出现

使用UDP,要增加一个简单的握手机制。
页: [1]
查看完整版本: F107+DP83848,lwip 1.3,发送数据,运行一段时间之后,数据发送异常