C 如何使用LWIP以适当的方式定期发送数据?

C 如何使用LWIP以适当的方式定期发送数据?,c,tcp,server,client,lwip,C,Tcp,Server,Client,Lwip,我正试图定期用LWIP从微控制器向客户端发送一些数据。我从一个名为“lwIP原始HTTP基本示例”的Atmel Studio示例中的代码开始。发送大约100个对象后,连接中断 我每100毫秒从客户端向微控制器发送一个心跳信号和另一个对象。然后从lwIP调用我的receive回调函数。以这种方式发送数据效果良好 但是我想发送与接收数据不耦合的数据。在我的尝试中,我使用在回调上下文中使用的相同函数发送数据,但在主while循环中使用。Im在own_init()中使用初始化中指向tcp_pcb的指针。

我正试图定期用LWIP从微控制器向客户端发送一些数据。我从一个名为“lwIP原始HTTP基本示例”的Atmel Studio示例中的代码开始。发送大约100个对象后,连接中断

我每100毫秒从客户端向微控制器发送一个心跳信号和另一个对象。然后从lwIP调用我的receive回调函数。以这种方式发送数据效果良好

但是我想发送与接收数据不耦合的数据。在我的尝试中,我使用在回调上下文中使用的相同函数发送数据,但在主while循环中使用。Im在own_init()中使用初始化中指向tcp_pcb的指针。当连接断开时,pcb的状态从建立更改为关闭。我的怀疑是我错误地使用了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;

}