金牌会员
- 积分
- 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,"STATUSisconnected");
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()是怎么关联的没看懂
|