完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用的是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; } } 希望有做过的或者会的各路大神指点一二,感激不尽。 |
|
相关推荐
7个回答
|
|
看STM32F429和F767的例程,这两个开发板的例程改了,直接发送
|
|
|
|
谢啦 真的可以 问题解决了
|
|
|
|
大兄弟,方便说下参考的F429 哪个例程吗? 我看实验58 还是轮询的啊
|
|
|
|
我参考的F767的例程61
|
|
|
|
請問樓主我剛看了下F767的例程61上面的做法還是輪詢後發送數據,做法還是與F103ZET6的例程完全一樣(我是參考寄存器板),可否請樓主說明下參考的是哪個C檔案的程序
麻煩了,謝謝 !! |
|
|
|
|
|
|
|
剛剛下載了F767的庫函數版終於看到了直接發送程序
//LWIP数据发送,用户应用程序调用此函数来发送数据 //tpcb:TCP控制块 //返回值:0,成功;其他,失败 err_t tcp_server_usersent(struct tcp_pcb *tpcb) { err_t ret_err; struct tcp_server_struct *es; es=tpcb->callback_arg; if(es!=NULL) //连接处于空闲可以发送数据 { es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_server_sendbuf),PBUF_POOL); //申请内存 pbuf_take(es->p,(char*)tcp_server_sendbuf,strlen((char*)tcp_server_sendbuf)); //将tcp_server_sentbuf[]中的数据拷贝到es->p_tx中 tcp_server_senddata(tpcb,es); //将tcp_server_sentbuf[]里面复制给pbuf的数据发送出去 tcp_server_flag&=~(1<<7); //清除数据发送标志 if(es->p!=NULL)pbuf_free(es->p);//释放内存 ret_err=ERR_OK; }else { tcp_abort(tpcb);//终止连接,删除pcb控制块 ret_err=ERR_ABRT; } return ret_err; } |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2574 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2371 浏览 5 评论
3228 浏览 3 评论
2843 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2796 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
681浏览 1评论
915浏览 0评论
1039浏览 0评论
678浏览 0评论
510浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 01:45 , Processed in 1.186042 second(s), Total 89, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号