新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2017-9-27
- 在线时间
- 9 小时
|
3金钱
我用的是STM32F103,请教各位大神怎么用主动的方式通过TCPIP发送数据,不是用tcp_server_poll这个轮询回调函数被动的发数据。
我的想法是把tcp_server_poll和tcp_server_senddata合成一个函数单独提取出来,但是函数的参数arg,es不知道怎么确定,具体函数如下
err_t tcp_server_poll(void *arg, struct tcp_pcb *tpcb)
{
err_t ret_err;
struct tcp_server_struct *es;
es=(struct tcp_server_struct *)arg;
if(es!=NULL)
{
if(tcp_server_flag&(1<<7)) //ÅD¶ÏêÇ·ñóDêy¾Yòa·¢Ëí
{
es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)led_sendbuf),PBUF_POOL); //éêÇëÄú′æ
pbuf_take(es->p,(char*)led_sendbuf,strlen((char*)led_sendbuf)); //½«tcp_client_sentbuf[]ÖDμÄêy¾Y¿½±′μ½es->p_txÖD
tcp_server_senddata(tpcb,es); //ÂÖÑˉμÄê±oò·¢Ëíòa·¢ËíμÄêy¾Y
tcp_server_flag&=~(1<<7); //Çå3yêy¾Y·¢Ëí±ê־λ
if(es->p!=NULL)pbuf_free(es->p); //êí·ÅÄú′æ
}else if(es->state==ES_TCPSERVER_CLOSING)//Dèòa1رÕᬽó?Ö′DD1رÕ2ù×÷
{
tcp_server_connection_close(tpcb,es);//1رÕᬽó
}
ret_err=ERR_OK;
}else
{
tcp_abort(tpcb);//ÖÕÖ1ᬽó,é¾3ypcb¿ØÖÆ¿é
ret_err=ERR_ABRT;
}
return ret_err;
}
void tcp_server_senddata(struct tcp_pcb *tpcb, struct tcp_server_struct *es)
{
struct pbuf *ptr;
u16 plen;
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)
{
plen=ptr->len;
es->p=ptr->next; //Ö¸ÏòÏÂò»¸öpbuf
if(es->p)pbuf_ref(es->p); //pbufμÄref¼óò»
pbuf_free(ptr);
tcp_recved(tpcb,plen); //¸üDÂtcp′°¿ú′óD¡
}else if(wr_err==ERR_MEM)es->p=ptr;
}
}
希望有做过的或者会的各路大神指点一二,感激不尽。
|
|