-
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,我估计问题就是这个情况导致的,但是我不知道该怎么查了,请问有没有人能够提供一些帮助的。。。
947浏览量 2回复量 关注量 -
gd32f450 lwip DMA失败
ErrStatus enet_software_reset(void) { uint32_t timeout = 0U; ErrStatus enet_state = ERROR; uint32_t dma_flag; /* reset all core internal registers located in CLK_TX and CLK_RX */ ENET_DMA_BCTL |= ENET_DMA_BCTL_SWR; /* wait for reset operation complete */ do{ dma_flag = (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR); timeout++; }while((RESET != dma_flag) && (ENET_DELAY_TO != timeout)); /* reset operation complete */ if(RESET == (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR)){ enet_state = SUCCESS; } return enet_state; } gd32f4xx_enet.c这个老是失败,led闪灯例程没有毛病
4100浏览量 17回复量 关注量 -
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]
5052浏览量 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]
1431浏览量 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]
4877浏览量 2回复量 关注量 -
GD32F450替换STM32F429以太网工作不正常
GD32F450替换STM32F429,在不使用操作系统的情况下以太网初始化可以成功,但网络不能正常运行;在加上FreeRTOS后以太网初始化不成功
3874浏览量 18回复量 关注量 -
STM32移植LWIP问题
[backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px]代码功能是创建客户端,静态ip,在407跑通了,但是直接复制移植到429的板子就运行报错,使用ucosii,请问可能是啥原因,lwip初始化成功,tcp客户端也初始化成功,之后就运行调试串口打印出这个[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px]Assertion "arp_table[i].q == NULL" failed at line 369 in ..\LWIP\lwip-1.4.1\src\netif\etharp.c[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px]那几行代码是[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px]/* 1) empty entry available? */[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] if (empty < ARP_TABLE_SIZE) {[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] i = empty;[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %"U16_F"\n", (u16_t)i));[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] } else {[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] /* 2) found recyclable stable entry? */[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] if (old_stable < ARP_TABLE_SIZE) {[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] /* recycle oldest stable*/[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] i = old_stable;[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %"U16_F"\n", (u16_t)i));[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] /* no queued packets should exist on stable entries */[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); //这里就是369行[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] /* 3) found recyclable pending entry without queued packets? */[/size][/font][/backcolor] [backcolor=rgb(232, 232, 232)][font=Tahoma, "][size=15px] }[/size][/font][/backcolor]
5513浏览量 21回复量 关注量 -
stmf4 f407程序直接下载到f427可以吗
旧项目407程序主要是用DM9000+ lwip做tcp服务器,跟上位机通讯,现在移植到427上有区别吗。之前没注意到这个问题改了下外部晶振就直接烧录了,目前串口通讯什么的可以实现,两个布板的时候mcu跟dm9000的IO连接都一样,但是pc端ping mcu一直ping不通,这个跟两款芯片的差别有关系吗。
1500浏览量 1回复量 关注量 -
STM32 + DP83848 LWIP2.3.1 库版本
STM32 + DP83848吗,目前网络采用LWIP2.3.1 直接通过STM32CUBE 配置后生成,测试初步的Demo代码 TCP UDP,都能正常使用,但是工程配置,TCP连接总是断断续续的,连接一下,掉线,然后又连接又掉线, UDP连接demo验证正常,连接公网的时候,只能接受到我这边的一帧数据,之后的数据服务器怎么也收不到数据? 谁网络这块熟悉
2322浏览量 1回复量 关注量 -
STM32F407采样LWIP库进行UDP到云端一下就不通了
STM32F407 + DP83848 采样LWIP库,进行UDP通信,发送到云端通了一下,云端接收到一次回应设备 设备开始发送心跳数据,云端在也收不到数据了,抓包显示设备没有到,设备一直在发送,本地端调试端口有明确设备一直在发送数据?
1332浏览量 1回复量 关注量