硬汉嵌入式论坛

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

[以太网] H7下RL-NET任务优先级的问题?PING延迟不稳定

[复制链接]

20

主题

94

回帖

154

积分

初级会员

积分
154
发表于 2024-3-26 23:28:34 | 显示全部楼层 |阅读模式
写了一个网络应用,使用的是RL-NET,发现Ping设备的时候,延迟不稳定,有时候会丢包?

[C] 纯文本查看 复制代码

来自 192.168.1.219 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间=1778ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间=199ms TTL=128
请求超时。
来自 192.168.1.219 的回复: 字节=32 时间=173ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间=136ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间=149ms TTL=128
来自 192.168.1.219 的回复: 字节=32 时间=49ms TTL=128



但是刚刚把网络移植成功的空白工程,ping的延迟都是小于1ms。
我本来怀疑是不是系统中的其他任务耗时过长,导致net的任务被阻塞太久,所以就尝试将网络任务的优先级调到最高,但仍然没有解决问题。

以下是一个调试截图
任务执行截图.png

虽然目前不影响网络的“连通性”,但还是觉得这样是有问题的。
请教一下,这个问题应该从那些方面排查问题呢?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-3-27 11:58:31 | 显示全部楼层
仅看这个ping的效果,你的这个程序模板是有问题的。这个非常不稳定。

回复

使用道具 举报

20

主题

94

回帖

154

积分

初级会员

积分
154
 楼主| 发表于 2024-3-27 15:33:40 | 显示全部楼层
eric2013 发表于 2024-3-27 11:58
仅看这个ping的效果,你的这个程序模板是有问题的。这个非常不稳定。

程序模板会有什么问题呢?H750的驱动是用的您写的那个驱动文件。刚刚把网络移植成功的时候,ping设备没有这个问题,都是1ms以内。后来加了一两个其他的工作任务后,就这样了。但是加的工作任务没有特别繁重的任务,就是读一读adc,然后10分钟才保存一次SD卡。adc读取任务,从调试图来看,大多数时间都是在等待。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-3-28 08:41:43 | 显示全部楼层
ifree 发表于 2024-3-27 15:33
程序模板会有什么问题呢?H750的驱动是用的您写的那个驱动文件。刚刚把网络移植成功的时候,ping设备没有 ...

你的以太网PHY芯片用的那个。

1、注意以太网PHY芯片的复位问题,这个是一个重要的点。
2、以太网相关任务的优先级,提升下,调试阶段设置到比你的其它任务优先级都高。
回复

使用道具 举报

20

主题

94

回帖

154

积分

初级会员

积分
154
 楼主| 发表于 2024-3-31 10:50:07 | 显示全部楼层
eric2013 发表于 2024-3-28 08:41
你的以太网PHY芯片用的那个。

1、注意以太网PHY芯片的复位问题,这个是一个重要的点。

我的 PHY 芯片使用的是 DM9162,我刚开始创建的空白工程网络是正常的。
我也尝试了将以太网相关任务的优先级设置到最高,但是没有改进。

我现在尝试重新创建空白工程,再一步一步把其他任务加回来,看看网络到底哪里出了问题。
回复

使用道具 举报

20

主题

94

回帖

154

积分

初级会员

积分
154
 楼主| 发表于 2024-3-31 11:37:23 | 显示全部楼层
终于破案了!果然还是基础不牢,地动山摇,惭愧惭愧!

原来是MPU的配置问题,有问题时的配置是这样的:

[C] 纯文本查看 复制代码
    /* 配置SRAM3的属性为Write through, read allocate,no write allocate */
    MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress      = 0x30040000;
    MPU_InitStruct.Size             = ARM_MPU_REGION_SIZE_32KB;	
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number           = MPU_REGION_NUMBER4;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);


将MPU配置修改为以下就对了:
[C] 纯文本查看 复制代码
    MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress      = 0x30040000;
    MPU_InitStruct.Size             = ARM_MPU_REGION_SIZE_32KB;	
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_SHAREABLE;
    MPU_InitStruct.Number           = MPU_REGION_NUMBER4;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);


由于ETH的驱动还不懂,只是一个“伸手党”,把驱动移植过来,刚开始能跑就不管了,不知道后来是不是因为什么原因改过这个MPU配置,网络时通时不通,还以为是系统任务太重导致的呢。
话说,改成下面这个虽然能用了,但还是不知道为什么。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-4-1 08:17:56 | 显示全部楼层
ifree 发表于 2024-3-31 11:37
终于破案了!果然还是基础不牢,地动山摇,惭愧惭愧!

原来是MPU的配置问题,有问题时的配置是这样的:
...

TCPnet教程着重说这个问题了,以太网描述符必须配置Device或者Strongly order模式。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 05:14 , Processed in 0.304201 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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