嵌入式技术论坛
直播中

罗星

9年用户 1688经验值
擅长:模拟技术
私信 关注
[问答]

RT-Thread 以太网出现这个断言错误如何解决呢

问题如下

出现概率, 极低

问题表现, 一旦出现, 系统停止运行, 三台设备stm32f427使用lan8720 联网,mqtt, 100ms 一条消息, 一个月平均低于一台机器出现这个断言错误, 问题出现频率过低, 一直没有定位到问题所在, 今天在网速测试再次复现这个问题, 想问下有遇到类似情况的同学吗?

((rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore) assertion failed at function:rt_sem_release, line number:608

这台测试设备, at32f437vgt7 , 使用的官方库, 软件只开启了lwip 和串口,和iperf 三个功能

iperf 测试工具, 以客户端模式下, 在数分钟内, 几乎100% 复现, 在tcp 服务端测试下, 没有出现

回帖(4)

刘丹

2022-9-8 10:08:03
如果不是系统刚启动时assert,那么有可能被篡改了,可以对其下个写断点
举报

罗星

2022-9-8 10:08:13
at32f437 drv_emac.c 中, tx_wait 信号量,只有release 和 take ,没有init , 我加了init 后, 跑了十几分钟没有出现这个故障了, 没想到 sem没有初始化也能使用! 看来和之前问题还不一样
1.jpg
举报

刘丹

2022-9-8 10:08:27
不可能呢,这样问题就更大了。
从你这行代码来看,之前并没有调用到,所以问题没暴露出来。
举报

罗星

2022-9-8 10:08:37
具体驱动代码大致是这样的, emac发送接收都是dma , 以服务器端测试一点问题都没有, 以客户端测试就出问题了, 在emac 中断服务函数里, tx 中断使用 rt_sem_release , take 在这里
2.jpg
确实增加了init 之后, 半小时没出题问题了, 是不是极其偶尔性的才会触发 dma 发送完成?
还有一个特性,在未init之前, 就是在我增加了EMAC_MAX_PACKET_LENGTH 从 1524到1540后, 出现的频率变高了,好几次开机就直接断言错误了

举报

更多回帖

发帖
×
20
完善资料,
赚取积分