从TCP(FreeRTOS、LWIP)接收数据

从TCP(FreeRTOS、LWIP)接收数据,tcp,arm,freertos,lwip,Tcp,Arm,Freertos,Lwip,当我启动这个程序(见下文)时,一切正常。但当我禁用将数据返回到TPCIP时,程序工作不正常 这是程序,工作正常:[1]: 这个函数在这里: 完全通信在task FreeRTOS中实现: extern void TCP_connection(void *pvParameters) { UNUSED(pvParameters); const portTickType xDelayTime = 5 / portTICK_RATE_MS; struct tcp_pcb *tc

当我启动这个程序(见下文)时,一切正常。但当我禁用将数据返回到TPCIP时,程序工作不正常

这是程序,工作正常:[1]:

这个函数在这里:

完全通信在task FreeRTOS中实现:

extern void TCP_connection(void *pvParameters)
{
    UNUSED(pvParameters);
    const portTickType xDelayTime = 5 / portTICK_RATE_MS;

    struct tcp_pcb *tcp_server;
    tcp_server = tcp_new();

    tcp_bind(tcp_server, IP_ADDR_ANY, TCP_PORT);

    while (1){
        tcp_server = tcp_listen(tcp_server);
        tcp_accept(tcp_server, prijimani_dat);

        vTaskDelay(xDelayTime);
    }
}
但当我只能从TCP读取数据,并且我不想将数据返回到TCPIP时,程序工作不正常。[2]:


有一个非常古老的例子说明了如何将FreeRTOS与lwIP结合使用。尽管本示例中包含的许多代码现在已被取代,但与lwIP的集成仍然有效,并可供您参考

如果您正在使用上列出的处理器之一(FreeRTOS+TCP是FreeRTOS自己的TCP/IP堆栈),那么这可能会提供进一步的参考。

我正在全部尝试

有任何错误,但是什么?当我尝试ping时,所有操作都是正确的

C:\>ping 192.168.0.145 -n 10

Pinging 192.168.0.145 with 32 bytes of data:
Reply from 192.168.0.145: bytes=32 time=2ms TTL=255
Reply from 192.168.0.145: bytes=32 time=4ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time=1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time=1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255

Ping statistics for 192.168.0.145:
    Packets: Sent = 10, Received = 10, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 4ms, Average = 0ms
C:\>ping 192.168.0.145-n 10
使用32字节数据ping 192.168.0.145:
来自192.168.0.145的回复:字节=32次=2ms TTL=255
来自192.168.0.145的回复:字节=32次=4ms TTL=255

192.168.0.145的回复:字节=32次Ok。我很笨。错误就在这里:

我创建了freeRTOS任务,在这个任务中,我每5毫秒在循环中调用两个函数

这是错误的:

extern void TCP_connection(void *pvParameters)
{
    UNUSED(pvParameters);
    const portTickType xDelayTime = 5 / portTICK_RATE_MS;

    struct tcp_pcb *tcp_server;
    tcp_server = tcp_new();

    if (tcp_bind(tcp_server, IP_ADDR_ANY, TCP_PORT) != ERR_OK)
        return;

    while (1){  
    tcp_server = tcp_listen(tcp_server);
    tcp_accept(tcp_server, server_accept);

        vTaskDelay(xDelayTime);
    }
}
这很好

extern void TCP_connection(void *pvParameters)
{
    UNUSED(pvParameters);
    const portTickType xDelayTime = 5 / portTICK_RATE_MS;

    struct tcp_pcb *tcp_server;
    tcp_server = tcp_new();

    if (tcp_bind(tcp_server, IP_ADDR_ANY, TCP_PORT) != ERR_OK)
        return;

    tcp_server = tcp_listen(tcp_server);
    tcp_accept(tcp_server, server_accept);

    while (1){  
        vTaskDelay(xDelayTime);
    }
}
C:\>ping 192.168.0.145 -n 10

Pinging 192.168.0.145 with 32 bytes of data:
Reply from 192.168.0.145: bytes=32 time=2ms TTL=255
Reply from 192.168.0.145: bytes=32 time=4ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time=1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time=1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255
Reply from 192.168.0.145: bytes=32 time<1ms TTL=255

Ping statistics for 192.168.0.145:
    Packets: Sent = 10, Received = 10, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 4ms, Average = 0ms
extern void TCP_connection(void *pvParameters)
{
    UNUSED(pvParameters);
    const portTickType xDelayTime = 5 / portTICK_RATE_MS;

    struct tcp_pcb *tcp_server;
    tcp_server = tcp_new();

    if (tcp_bind(tcp_server, IP_ADDR_ANY, TCP_PORT) != ERR_OK)
        return;

    while (1){  
    tcp_server = tcp_listen(tcp_server);
    tcp_accept(tcp_server, server_accept);

        vTaskDelay(xDelayTime);
    }
}
extern void TCP_connection(void *pvParameters)
{
    UNUSED(pvParameters);
    const portTickType xDelayTime = 5 / portTICK_RATE_MS;

    struct tcp_pcb *tcp_server;
    tcp_server = tcp_new();

    if (tcp_bind(tcp_server, IP_ADDR_ANY, TCP_PORT) != ERR_OK)
        return;

    tcp_server = tcp_listen(tcp_server);
    tcp_accept(tcp_server, server_accept);

    while (1){  
        vTaskDelay(xDelayTime);
    }
}