-
tcpip线程被mu0锁住导致网络线程无法使用问题 赏300家园币
各位好,我使用rtthread开发STM32F407VGT6芯片,程序有多个线程,每个线程都会创建一个socket,建立tcp连接或者udp连接,现在出现一个问题,程序长时间运行有概率死机,但是没有任何hardfault打印,我加入了cmbacktrace也没有输出任何信息,我在串口的msh里输入任何数据都不会相应,多次输入会提示接收字符缓存区满了。 后来根据检查发现,我的CAN接收发送线程和RS485接收发送线程没死,我在程序里添加了一个接收指定字符后,打印一些函数结果的代码,代码如下: ch = uart_sample_get_char(); // LOG_D("ch = %d",ch); if(ch == 0x01) { mem_monitor2(NULL); list_thread(); list_sem(); list_msgqueue(); list_mutex(); list_timer(); } else if(ch == 0x02) { for(int i=0;i < 8; i ++) { if(lock[i]->owner != RT_NULL) { rt_kprintf("Mutex %s held by thread: %s\n", lock[i]->parent.parent.name, lock[i]->owner->name); }else { rt_kprintf("Mutex %s is free\n", lock[i]->parent.parent.name); } } } else if(ch == 0x03) { msh_close_sockets(); } 这里的msh_close_sockets()作用是关闭所有的socket,函数的代码如下,: // MSH 命令实现 void msh_close_sockets(void) { for (int var = 0; var < 8; ++var) { rt_mutex_take(lock[var], RT_WAITING_FOREVER); if(sock[var] != server_cfg_num && sock[var] != server_execute_num && sock[var] != server_udp_num && sock[var] >= 0){ if(shutdown(sock[var], SHUT_RDWR) >= 0) { if(closesocket(sock[var]) >= 0) { LOG_D("===== close %d successs! =====",var); sock[var] = -1; } else { LOG_D("===== close %d fail! =====",var); } } else { LOG_D("===== shutdown %d fail! =====",var); } } rt_mutex_release(lock[var]); } rt_pin_write(ETH_RESET, 0); rt_thread_mdelay(1000); rt_pin_write(ETH_RESET, 1); } 根据测试发现,list_mutex()函数,打印了一些线程锁,我看到一个tcpip线程被一个mu0锁住了,后面有4个线程在等待mu0,我估计问题就是这个情况导致的,但是我不知道该怎么查了,请问有没有人能够提供一些帮助的。。。
2700浏览量 2回复量 关注量 -
webnet应答数据,过了至少2秒后才到达etx线程,网页打开慢 sos
[color=#444444][color=rgb(68, 68, 68)][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px][backcolor=rgb(255, 255, 255)][font=Tahoma, "]AT32F437跑rt-thread5.0、lwip2.1.2、webnet2.0.3[/font][/backcolor][/size][/font][/backcolor][/color][/color] [color=#444444][color=rgb(68, 68, 68)][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px][backcolor=rgb(255, 255, 255)][font=Tahoma, "]webnet线程处理一个请求在14310毫秒处结束,中间多次通过webnet_session_write和webnet_session_printf函数调用send发送了数据。在2490毫秒之后(即16800毫秒处),线程eth_tx_thread_entry才收邮箱,调用enetif->eth_tx()发数据。[/font][/backcolor][/size][/font][/backcolor][/color][/color][color=#444444][color=rgb(68, 68, 68)][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px][backcolor=rgb(255, 255, 255)][font=Tahoma, "] [/font][/backcolor][/size][/font][/backcolor][/color][/color][attach]2228840[/attach][attach]2228842[/attach] [attach]2228844[/attach]
5061浏览量 0回复量 关注量 -
webnet应答数据,过了至少2秒后才到达etx线程,网页打开慢 sos
[i=s] 本帖最后由 book1024 于 2024-3-7 18:41 编辑 [/i] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]AT32F437跑rt-thread5.0、lwip2.1.2、webnet2.0.3[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(255, 255, 255)][font=Tahoma, "][size=16px]webnet线程处理一个请求在14310毫秒处结束,中间多次通过webnet_session_write和webnet_session_printf函数调用send发送了数据。在2490毫秒之后(即16800毫秒处),线程eth_tx_thread_entry才收邮箱,调用enetif->eth_tx()发数据。[/size][/font][/backcolor][/color][attach]2228834[/attach] [attach]2228836[/attach] [attach]2228838[/attach][font=Tahoma,] [/font][img]https://oss-club.rt-thread.org/uploads/20240307/214ecac5ccd6ce9ecd597c75854dd89e.jpg.webp[/img] [img]https://oss-club.rt-thread.org/uploads/20240307/b226457f8729317b32a5ccde1e5599a3.jpg.webp[/img] [img]https://oss-club.rt-thread.org/uploads/20240307/baade794958f275f0655ec0a8ea7d29f.jpg[/img]
1451浏览量 0回复量 关注量 -
webnet应答数据,过了至少2秒后才到达etx线程,网页打开慢
[i=s] 本帖最后由 book1024 于 2024-3-7 18:38 编辑 [/i] AT32F437跑rt-thread5.0、lwip2.1.2、webnet2.0.3 webnet线程处理一个请求在14310毫秒处结束,中间多次通过webnet_session_write和webnet_session_printf函数调用send发送了数据。在2490毫秒之后(即16800毫秒处),线程eth_tx_thread_entry才收邮箱,调用enetif->eth_tx()发数据。[attach]2228832[/attach] [attach]2228830[/attach] [attach]2228828[/attach] [img]https://oss-club.rt-thread.org/uploads/20240307/214ecac5ccd6ce9ecd597c75854dd89e.jpg.webp[/img] [img]https://oss-club.rt-thread.org/uploads/20240307/b226457f8729317b32a5ccde1e5599a3.jpg.webp[/img] [img]https://oss-club.rt-thread.org/uploads/20240307/baade794958f275f0655ec0a8ea7d29f.jpg[/img]
4893浏览量 2回复量 关注量 -
求助:有没大佬用过rt-thread下的at-start-f407BSP的网口功能? sos
我在使用rt-thread下的at-start-f407BSP的网口功能时,出现了问题。 具体表现为,运行程序一段时间后,RO(接受溢出)状态位被置位,程序不再能接收数据,但是依然可以发送数据。 我根据对手册上的理解提高了接收线程的优先级,但是只解决了部分问题。时间久了还是会出现这个问题。 有没有大佬遇见过类似的问题,或者有相关经验可以提供一点信息? 希望能不吝赐教,在此先行谢过
2611浏览量 0回复量 关注量