慕诗客 发表于 2023-4-16 17:31:56

连续调用tcpwrite+tcp_output发送后内存溢出

有没有谁使用过lwip连续高速发送啊,我这边板子作为tcp client客户端,需要连续不断往电脑server发送数据,因为需要立即发送,使用的tcpwrite+tcp_output函数,但是连续发送一段时间后就会卡死,开启调试打印后发现内存申请失败。然后我试着降低发送频率后,就可以持续发送了,但是目前能够维持稳定发送的速度只有几十KB。



发送部分代码如下

      struct pbuf *ptr;
        err_t wr_err=ERR_OK;
        while((wr_err==ERR_OK)&&es->p&&(es->p->len<=tcp_sndbuf(tpcb)))
        {
                ptr=es->p;
                wr_err=tcp_write(tpcb,ptr->payload,ptr->len,1);
                if(wr_err==ERR_OK)
                {
                        es->p=ptr->next;                       
                        if(es->p)pbuf_ref(es->p);       
                        pbuf_free(ptr);                               
                }else if(wr_err==ERR_MEM)es->p=ptr;
                tcp_output(tpcb);               
        }

eric2013 发表于 2023-4-17 01:09:14

lwip的原始API玩起来太费劲。锁定下发送成功后标志是那个,一定要保证收到服务器应答后再开始新的发送。
页: [1]
查看完整版本: 连续调用tcpwrite+tcp_output发送后内存溢出