| 
 
金牌会员  
 
	积分1887金钱1887 注册时间2015-4-21在线时间102 小时 | 
 
1金钱 
| 在这个while循环中,是怎么调用tcp_client_senddata()和tcp_client_recv()发送接收数据的?是要等到创建一个新的pcb?
 while(res==0)
 {
 key=KEY_Scan(0);
 if(key==WKUP_PRES)break;
 if(key==KEY0_PRES)//KEY0按下了,发送数据
 {
 tcp_client_flag|=1<<7;//标记要发送数据
 }
 if(tcp_client_flag&1<<6)//是否收到数据?
 {
 LCD_Fill(30,230,lcddev.width-1,lcddev.height-1,WHITE);//清上一次数据
 LCD_ShowString(30,230,lcddev.width-30,lcddev.height-230,16,tcp_client_recvbuf);//显示接收到的数据tcp_client_recvbuf
 tcp_client_flag&=~(1<<6);//标记数据已经被处理了.
 }
 if(tcp_client_flag&1<<5)//是否连接上?
 {
 if(connflag==0)
 {
 LCD_ShowString(30,190,lcddev.width-30,lcddev.height-190,16,"STATUS:Connected   ");//提示消息
 POINT_COLOR=RED;
 LCD_ShowString(30,210,lcddev.width-30,lcddev.height-190,16,"Receive Data:");//提示消息
 POINT_COLOR=BLUE;//蓝色字体
 connflag=1;//标记连接了
 }
 }else if(connflag)
 {
 LCD_ShowString(30,190,190,16,16,"STATUS
  isconnected"); LCD_Fill(30,210,lcddev.width-1,lcddev.height-1,WHITE);//清屏
 connflag=0;        //标记连接断开了
 }
 lwip_periodic_handle();
 delay_ms(2);
 t++;
 if(t==200)
 {
 if(connflag==0&&(tcp_client_flag&1<<5)==0)//未连接上,则尝试重连
 {
 tcp_client_connection_close(tcppcb,0);//关闭连接
 tcppcb=tcp_new();        //创建一个新的pcb
 if(tcppcb)                        //创建成功
 {
 tcp_connect(tcppcb,&rmtipaddr,TCP_CLIENT_PORT,tcp_client_connected);//连接到目的地址的指定端口上,当连接成功后回调tcp_client_connected()函数
 }
 }
 t=0;
 LED0=!LED0;
 }
 }
 
 
 | 
 
最佳答案
查看完整内容[请看2#楼] 接收在中断函数void ETH_IRQHandler(void)中,发送在轮询void lwip_periodic_handle() 函数中的 tcp_tmr();中的tcp_slowtmr();里的TCP_EVENT_POLL(prev, err);函数,运行此函数时会进入void tcp_client_senddata()发送函数;
但tcp_client_senddata 与TCP_EVENT_POLL()是怎么关联的没看懂 |