硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1527|回复: 4
收起左侧

[FreeRTOS] FreeRTOS LwIP TCP服务器线程跑飞

[复制链接]

18

主题

43

回帖

97

积分

初级会员

积分
97
发表于 2022-11-10 20:44:49 | 显示全部楼层 |阅读模式
FreeRTOS v10.3.0 LwIP 2.1.2
STM32F407芯片
坛友们,我使用Netconn创建tcp服务器,通过网络调试助手的tcp客户端与tcp服务器连接,网络调试助手发送数据给tcp服务器,服务器收到数据后,再通过串口经485发送出去;
在实际操作中发现,tcp调试助手发送数据给创建的服务器发送数据是正常的,但是每隔50ms发送数据的话,会导致tcp连接断开,然后tcp服务器任务并没有返回到侦听状态,而是一直在等待数据接收,一直在执行这句话if( ( err = netconn_recv( newconn485_1, &recvbuf ) ) == ERR_OK ),且返回的err = ERR_TIMEOUT。上位机客户端也无法再连接这个服务器。但是别的任务能运行,系统并没有卡死,开启了stackoverflow检测,也没问题。
以下是我的TCP服务器源码:
image.png
串口波特率2400时,出问题时的数据量比9600时的少,所以是不是因为串口速度太慢了,网络数据太快了,导致服务器任务卡死了。但是,当服务器只接收数据,不处理的时候(服务器中不通过串口转发数据),上位机无论发多块,都没有问题,服务器正常。
我加大任务的任务栈也不管用,增加MEM_SIZE和MEMP_NUM_NETBUF也不管用,查不出卡死在那里。
在此,请教下硬汉和坛友们,有没有遇到过。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-11-11 10:09:06 | 显示全部楼层
你测下这个函数的溢出问题,我看源码是只要溢出时间内没有收到就进入,这样的话,你的应用处理就不太合理,这样就成了每10ms就执行一次了。

image.png
回复

使用道具 举报

18

主题

43

回帖

97

积分

初级会员

积分
97
 楼主| 发表于 2022-11-23 09:45:10 | 显示全部楼层
感谢硬汉,我这里tcp连接后,就不会vtaskdelay( 10 )啦。最后问题找到了,是因为tcp_thread的线程优先级TCPIP_THREAD_PRIO我设置的太低了,DM9000网络数据来的太快,导致来不及处理,我把它设成最高,问题解决了,抱歉这么晚才来回帖。
sys_thread_new( TCPIP_THREAD_NAME,  tcpip_thread,  NULL, TCPIP_THREAD_STACKSIZE,  TCPIP_THREAD_PRIO );
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-11-23 16:48:25 | 显示全部楼层
Zachary唷 发表于 2022-11-23 09:45
感谢硬汉,我这里tcp连接后,就不会vtaskdelay( 10 )啦。最后问题找到了,是因为tcp_thread的线程优先级TCP ...

谢谢告知最终问题原因。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 15:57 , Processed in 0.277063 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表