从TCP(FreeRTOS、LWIP)接收数据
当我启动这个程序(见下文)时,一切正常。但当我禁用将数据返回到TPCIP时,程序工作不正常 这是程序,工作正常:[1]: 这个函数在这里: 完全通信在task FreeRTOS中实现:从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
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);
}
}