打印

GD32开发板LWIP大数据传输会卡死?

[复制链接]
1651|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cqsosolife|  楼主 | 2023-9-15 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有哪位大佬试过GD32F450上的LWIP,官方的开发板没问题吧?怎么一个简单的数据传输都会卡死呢?
有没有哪位大佬帮忙看看,GD32F450做TCP服务器,电脑做客户端,每次发1K给服务器,服务器收到后返回1个字节,客户端收到回复的1个字节再发1K,这样循环。
然后发现GD32的服务器10分钟内就收不到数据了,电脑这边客户端直接断开连接!
程序就是开发板上的程序简单修改,然后用来测试的

关键收数据代码如下:
static err_t hello_gigadevice_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
        u8_t *pRecv = arg;
        struct pbuf *q;
        char *c;
        int i;

        int nRecvLen = 0;

        if( p != NULL )
        {
                nRecvLen = 0;
                tcp_recved(pcb, p->tot_len);
                for(q = p; q != NULL; q = q->next)
                {
                        c = q->payload;
                        for(i = 0; i < q->len; i++)
                        {
                                pRecv[nRecvLen++] = c[i];
                                if ( nRecvLen>MAX_BUF_SIZE )
                                {
                                        printf("Out of memory!\r\n");
                                        return ERR_MEM;
                                }
                        }
                }
               
                printf("nRecvLen=%d\r\n",nRecvLen);
                bitSend[0]=0;
                tcp_write(pcb, bitSend, 1, TCP_WRITE_FLAG_COPY);
       
                pbuf_free(p);
        }
        else if(err == ERR_OK)
        {
                        /* when the pbuf is NULL and the err is ERR_OK, the remote end is closing the connection. */
                        /* we free the allocated memory and we close the connection */
                        printf("ThorX9.NET Client Closed @IP:%d.%d.%d.%d\r\n",pcb->remote_ip.addr&0xFF,pcb->remote_ip.addr>>8&0xFF,pcb->remote_ip.addr>>16&0xFF,pcb->remote_ip.addr>>24);
                        mem_free(pRecv);
                        return tcp_close(pcb);
        }
        return ERR_OK;
}

使用特权

评论回复
沙发
cqsosolife|  楼主 | 2023-9-15 16:33 | 只看该作者
也不用怀疑pRecv这个接收缓冲区,用lwip的mem_calloc分配的

static err_t hello_gigadevice_accept(void *arg, struct tcp_pcb *pcb, err_t err)
{
        u8_t *pRecv = mem_calloc(MAX_BUF_SIZE,1);
        if ( pRecv == NULL )
        {
                printf("mem_calloc(%d,1) Error %d\r\n",MAX_BUF_SIZE);
                return ERR_MEM;
        }
  tcp_arg(pcb, pRecv);
        tcp_err(pcb, hello_gigadevice_conn_err);
        tcp_recv(pcb, hello_gigadevice_recv);
        tcp_write(pcb, GREETING, strlen(GREETING), TCP_WRITE_FLAG_COPY);
        printf("Server Successfully Connected @IP:%d.%d.%d.%d\r\n",pcb->remote_ip.addr&0xFF,pcb->remote_ip.addr>>8&0xFF,pcb->remote_ip.addr>>16&0xFF,pcb->remote_ip.addr>>24);

        return ERR_OK;
}

使用特权

评论回复
板凳
flycamelaaa| | 2023-9-19 15:35 | 只看该作者
检查网络连接是否稳定可靠。

使用特权

评论回复
地板
powerantone| | 2023-9-19 15:36 | 只看该作者
如果硬件设备内存不足或者出现其他硬件故障,也可能会导致数据传输卡死。这时需要检查硬件设备的使用情况,确保其正常运行。

使用特权

评论回复
5
stormwind123| | 2023-9-19 15:37 | 只看该作者
软件出现漏洞或者程序设计不合理,也可能会导致数据传输卡死。这时需要检查软件程序的设计和实现,确保其没有漏洞,并且能够正确处理大数据传输。

使用特权

评论回复
6
probedog| | 2023-9-19 15:37 | 只看该作者
升级LWIP协议版本,看是否能够解决问题。

使用特权

评论回复
7
cqsosolife|  楼主 | 2023-9-19 23:13 | 只看该作者
flycamelaaa 发表于 2023-9-19 15:35
检查网络连接是否稳定可靠。

考虑过这个问题,换过网络环境测试一样的结果

使用特权

评论回复
8
cqsosolife|  楼主 | 2023-9-19 23:16 | 只看该作者
本帖最后由 cqsosolife 于 2023-9-19 23:30 编辑
powerantone 发表于 2023-9-19 15:36
如果硬件设备内存不足或者出现其他硬件故障,也可能会导致数据传输卡死。这时需要检查硬件设备的使用情况, ...

每次只传1k数据,内存不足这个说不过去,硬件用官方开发板和我们自制的板都是一个结果

使用特权

评论回复
9
cqsosolife|  楼主 | 2023-9-19 23:17 | 只看该作者
stormwind123 发表于 2023-9-19 15:37
软件出现漏洞或者程序设计不合理,也可能会导致数据传输卡死。这时需要检查软件程序的设计和实现,确保其没 ...

官方开发板的原装程序,如果是“出现漏洞或者程序设计不合理”,那我真的是……

使用特权

评论回复
10
duo点| | 2023-9-20 15:25 | 只看该作者
TCP连接是否存在问题

使用特权

评论回复
11
Bowclad| | 2023-9-27 19:50 | 只看该作者
用的官方例程改的吗?

使用特权

评论回复
12
Undshing| | 2023-9-27 21:58 | 只看该作者
网络设置正常吗?

使用特权

评论回复
13
tpgf| | 2023-10-10 19:19 | 只看该作者
如何确定网络连接的可靠性呢

使用特权

评论回复
14
nawu| | 2023-10-10 19:39 | 只看该作者
当网络连接断开之后如何自动恢复连接呢

使用特权

评论回复
15
aoyi| | 2023-10-10 19:56 | 只看该作者
nawu 发表于 2023-10-10 19:39
当网络连接断开之后如何自动恢复连接呢

以太网本身就具有重连的机制吧

使用特权

评论回复
16
zljiu| | 2023-10-11 10:41 | 只看该作者
这个数量的数据传输应该没有任何压力啊

使用特权

评论回复
17
gwsan| | 2023-10-11 11:02 | 只看该作者
楼主下载一下官方配套的例程试一下

使用特权

评论回复
18
tfqi| | 2023-10-11 11:22 | 只看该作者
cqsosolife 发表于 2023-9-19 23:17
官方开发板的原装程序,如果是“出现漏洞或者程序设计不合理”,那我真的是…… ...

这个是很正常的 而且有时候硬件 也不相符

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝