我正在尝试使用LWIP从微控制器定期向客户端发送一些数据。我从Atmel-Studio示例“ lwIP Raw HTTP基本示例”中的代码开始。发送约100个对象后,连接断开。
我每100毫秒从客户端向微控制器发送一个心跳信号和另一个对象。然后从lwIP调用我的接收回调函数。以这种方式发送数据可以正常工作。
但是我要发送与接收数据解耦的数据。在尝试中,我使用与回调上下文中相同的功能(但在主while循环中)发送数据。我在own_init()中使用从初始化指向tcp_pcb的指针。连接断开时,PCB的状态从ESTABLISHED变为CLOSED。我的怀疑是我错误地使用了pcb指针,但我无法提出另一种方法。谢谢!
int main(void)
{
...
/* Bring up the ethernet interface & initialize timer0, channel0. */
init_ethernet();
/* Bring up the server. */
struct tcp_pcb* pcb;
pcb=own_init();
uint32_t sendInterval=100; //ms
uint32_t lastTimeSFSsent=0;
uint32_t lastTimeHeartbeatSent=0;
uint32_t currentTime=0;
uint8_t is_connected=0;
initSFS();
while(1)
{
currentTime=sys_get_ms();
if(currentTime > lastTimeSFSsent + sendInterval && pcb->state==ESTABLISHED){
lastTimeSFSsent=sys_get_ms();
sendSFS(pcb);
}
if(currentTime> lastTimeHeartbeatSent + sendInterval && pcb->state==ESTABLISHED){
lastTimeHeartbeatSent=sys_get_ms();
sendHeartbeat(pcb);
}
ethernet_task();
}
}
这与示例代码不同:
struct tcp_pcb* own_init(void)
{
struct tcp_pcb *pcb;
struct tcp_pcb *tpcb;
pcb = tcp_new();
tcp_bind(pcb, IP_ADDR_ANY, 5005);
tpcb = tcp_listen(pcb);
tcp_accept(tpcb, own_accept);
return pcb;
}