金牌会员
- 积分
- 1887
- 金钱
- 1887
- 注册时间
- 2012-10-28
- 在线时间
- 353 小时
|
3金钱
本帖最后由 hpdell 于 2017-11-20 14:17 编辑
请教下,关于lwip 轮询函数
tcp_poll(tpcb,tcp_echoclient_poll,1); //每秒中轮询2次,lwip最大一次只能够发送 1500-40 个字节,那么我如果一共有20MB字节的数据需要发送,该如何处理啊 ???
/*
轮询函数,
*/
static err_t tcp_echoclient_poll(void *arg, struct tcp_pcb *tpcb)
{
err_t ret_err;
struct tcp_client_struct *es;
es = (struct tcp_client_struct*)arg;
if(es != NULL) //连接处于空闲可以发送数据
{
if(ReadDataTxStatus()) //判断是否有数据要发送
{
es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_client_sendbuf),PBUF_POOL); //申请内存
pbuf_take(es->p,(char*)tcp_client_sendbuf,strlen((char*)tcp_client_sendbuf)); //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中
tcp_echoclient_send(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去
CLIENT_DATA_SEND_CLEAR_FLAG; //清除数据发送标志
if(es->p)pbuf_free(es->p); //释放内存
}
else if(es->state == ES_TCPCLIENT_CLOSING)
{
tcp_echoclient_connection_close(tpcb,es);//关闭TCP连接
}
ret_err=ERR_OK;
}
else
{
tcp_abort(tpcb);//终止连接,删除pcb控制块
ret_err=ERR_ABRT;
}
return ret_err;
}
|
最佳答案
查看完整内容[请看2#楼]
把跟数据发送有关的从tcp_poll函数中提出来,专门做一个发送函数,然后直接调用这个发送函数发送!参考F429和F767开发板的例程,至于你的20M字节,分开发送啊!多发送几次不就行了。
|