打印
[技术讨论]

使用正点原子的以太网代码进行UDP通讯会卡死

[复制链接]
1607|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有个项目是8通道ADC独立采样,每个通道使用4字节浮点型传输。ADC采样速率100K+,UDP通讯速率33Mbps。跑个十几二十分钟后就发现以太网停了,然后仿真发现程序卡死在下图的while循环里。

heth.State一直是BUSY,while循环里边的函数一直返回ERR_MEM


使用特权

评论回复

相关帖子

沙发
qinlu123|  楼主 | 2025-5-12 18:01 | 只看该作者
State每次都不一样,最新测试了一次一直是READY

使用特权

评论回复
板凳
Unarty| | 2025-5-13 10:21 | 只看该作者
把数据接收从中断接收放到main- while里面去试试

使用特权

评论回复
地板
qinlu123|  楼主 | 2025-5-13 13:14 | 只看该作者
Unarty 发表于 2025-5-13 10:21
把数据接收从中断接收放到main- while里面去试试

把while改if

使用特权

评论回复
5
dffzh| | 2025-5-13 13:30 | 只看该作者

改成if为轮询判断状态就可以了,是吗?

使用特权

评论回复
6
飞思啦| | 2025-5-13 13:37 | 只看该作者
可以单独保留lwip的代码验证看看,确认网络部分代码没有问题,再慢慢加入其它逻辑

使用特权

评论回复
7
qinlu123|  楼主 | 2025-5-13 13:43 | 只看该作者
dffzh 发表于 2025-5-13 13:30
改成if为轮询判断状态就可以了,是吗?

还没试呢。UDP单向通讯不知为何会偶尔进接收中断,在中断里打断点进来后稍微等一会再运行反复几次后就不再进了,但是跑了一会后网速从33M降到2M了

使用特权

评论回复
8
qinlu123|  楼主 | 2025-5-13 13:45 | 只看该作者
网上查资料说是有个什么MMC中断需要关闭,但是没找到关闭办法

使用特权

评论回复
9
dffzh| | 2025-5-13 13:59 | 只看该作者
qinlu123 发表于 2025-5-13 13:43
还没试呢。UDP单向通讯不知为何会偶尔进接收中断,在中断里打断点进来后稍微等一会再运行反复几次后就不 ...

1、是不是有地方申请内存没释放呀?RAM空间越来越少;
2、deepseek了一下,输出了可能原因,你可以参考一下我发你的pdf附件。

UDP通讯会卡死的可能原因.pdf

538.6 KB

使用特权

评论回复
10
qinlu123|  楼主 | 2025-5-13 14:32 | 只看该作者
dffzh 发表于 2025-5-13 13:59
1、是不是有地方申请内存没释放呀?RAM空间越来越少;
2、deepseek了一下,输出了可能原因,你可以参考一 ...

这个问题很多人遇到
https://www.armbbs.cn/forum.php?mod=viewthread&tid=118310
http://www.openedv.com/thread-335748-1-1.html

使用特权

评论回复
11
dffzh| | 2025-5-13 14:41 | 只看该作者
qinlu123 发表于 2025-5-13 14:32
这个问题很多人遇到
https://www.armbbs.cn/forum.php?mod=viewthread&tid=118310
http://www.openedv.co ...

看来是个经典问题啊,我来学习学习;
我看你发的第一个论坛链接下面有这个帖子,你有按照操作试试吗?

使用特权

评论回复
12
qinlu123|  楼主 | 2025-5-13 14:48 | 只看该作者
dffzh 发表于 2025-5-13 14:41
看来是个经典问题啊,我来学习学习;
我看你发的第一个论坛链接下面有这个帖子,你有按照操作试试吗?
...

他这个帖子是STM32H7的解决办法,我感觉应该是这个问题,但是我不知道F407该咋办。我现在开着仿真,刚开始会进几次接收中断然后就不进了,跑一段时间通讯会降速,如果这时候我关闭仿真网速直接归0,也就是说我开不开仿真对程序运行也有影响。

使用特权

评论回复
13
dffzh| | 2025-5-13 15:24 | 只看该作者
本帖最后由 dffzh 于 2025-5-13 15:29 编辑
qinlu123 发表于 2025-5-13 14:48
他这个帖子是STM32H7的解决办法,我感觉应该是这个问题,但是我不知道F407该咋办。我现在开着仿真,刚开 ...


找到MMC中断屏蔽寄存器(ETH_MMCIMR)的地址,将该寄存器所有位置1来屏蔽所有MMC中断:
// 屏蔽所有MMC中断
ETH->MMCIMR = 0xFFFFFFFF;


你试试看。

404446822f2ba1f978.png (37.25 KB )

404446822f2ba1f978.png

使用特权

评论回复
14
qinlu123|  楼主 | 2025-5-13 15:30 | 只看该作者
dffzh 发表于 2025-5-13 15:24
找到MMC中断屏蔽寄存器(ETH_MMCIMR)的地址,将该寄存器所有位置1来屏蔽所有MMC中断:
// 屏蔽所有MMC中 ...

我试试,刚打开手册

使用特权

评论回复
评论
dffzh 2025-5-13 17:00 回复TA
@qinlu123 :拿个风扇对着PHY芯片吹,看是否还会出现?这种方式也可以作为是否是温度高引起降速的判定之一 
qinlu123 2025-5-13 16:20 回复TA
@dffzh :现在也是怀疑发热的原因 
dffzh 2025-5-13 16:12 回复TA
@qinlu123 :如果怀疑,有木有红外测温仪或者简单的测温枪也行,测试一下板子或者芯片温度 
qinlu123 2025-5-13 16:10 回复TA
@dffzh :还没完全解决,长时间运行会降速,不知道是不是发热导致的,降速后单片机运行速度不变我观察一个任务的执行频率没有变化 
dffzh 2025-5-13 15:56 回复TA
@qinlu123 :恭喜你,解决问题,今天可以早点下班肥家,哈哈 
qinlu123 2025-5-13 15:38 回复TA
改完后中断只进了一次,之前都是频繁进的,看来有效果 
15
dffzh| | 2025-5-13 16:36 | 只看该作者
qinlu123 发表于 2025-5-13 15:30
我试试,刚打开手册

用的什么PHY芯片?
长时间运行可能会导致PHY芯片温度升高,在高温下PHY是不是会自动降速以保护芯片?
查看下PHY芯片的手册,看下工作温度;
然后测试一下板子的温度。

使用特权

评论回复
16
qinlu123|  楼主 | 2025-5-13 16:46 | 只看该作者
dffzh 发表于 2025-5-13 16:36
用的什么PHY芯片?
长时间运行可能会导致PHY芯片温度升高,在高温下PHY是不是会自动降速以保护芯片?
查 ...

LAN8720,不降速正常运行45℃,现在还没复现。刚才捋了一遍手册没发现,准备让deepseek翻译一下再看

使用特权

评论回复
17
qinlu123|  楼主 | 2025-5-13 17:01 | 只看该作者
dffzh 发表于 2025-5-13 16:36
用的什么PHY芯片?
长时间运行可能会导致PHY芯片温度升高,在高温下PHY是不是会自动降速以保护芯片?
查 ...


不知道咋整的寄存器又变回去了,看来光初始化的时候写一次寄存器还不行


使用特权

评论回复
18
qinlu123|  楼主 | 2025-5-13 18:02 | 只看该作者
dffzh 发表于 2025-5-13 16:36
用的什么PHY芯片?
长时间运行可能会导致PHY芯片温度升高,在高温下PHY是不是会自动降速以保护芯片?
查 ...

看来不是那俩寄存器的问题,现在还是会卡死

使用特权

评论回复
19
qinlu123|  楼主 | 2025-5-13 18:14 | 只看该作者
qinlu123 发表于 2025-5-13 18:02
看来不是那俩寄存器的问题,现在还是会卡死

我现在把while循环从中断里拿出来改成if轮询再测试

使用特权

评论回复
20
dffzh| | 2025-5-14 09:32 | 只看该作者
qinlu123 发表于 2025-5-13 18:02
看来不是那俩寄存器的问题,现在还是会卡死

所以你的意思是按那个论坛上的类似STM32H系列的修改后没有效果?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

174

主题

1910

帖子

14

粉丝