ifree 发表于 2024-3-26 23:28:34

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

写了一个网络应用,使用的是RL-NET,发现Ping设备的时候,延迟不稳定,有时候会丢包?



来自 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的任务被阻塞太久,所以就尝试将网络任务的优先级调到最高,但仍然没有解决问题。

以下是一个调试截图


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

eric2013 发表于 2024-3-27 11:58:31

仅看这个ping的效果,你的这个程序模板是有问题的。这个非常不稳定。

ifree 发表于 2024-3-27 15:33:40

eric2013 发表于 2024-3-27 11:58
仅看这个ping的效果,你的这个程序模板是有问题的。这个非常不稳定。

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

eric2013 发表于 2024-3-28 08:41:43

ifree 发表于 2024-3-27 15:33
程序模板会有什么问题呢?H750的驱动是用的您写的那个驱动文件。刚刚把网络移植成功的时候,ping设备没有 ...

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

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

ifree 发表于 2024-3-31 10:50:07

eric2013 发表于 2024-3-28 08:41
你的以太网PHY芯片用的那个。

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


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

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

ifree 发表于 2024-3-31 11:37:23

终于破案了!果然还是基础不牢,地动山摇,惭愧惭愧!

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

    /* 配置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配置修改为以下就对了:
    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的驱动还不懂:L,只是一个“伸手党”,把驱动移植过来,刚开始能跑就不管了,不知道后来是不是因为什么原因改过这个MPU配置,网络时通时不通,还以为是系统任务太重导致的呢。
话说,改成下面这个虽然能用了,但还是不知道为什么。

eric2013 发表于 2024-4-1 08:17:56

ifree 发表于 2024-3-31 11:37
终于破案了!果然还是基础不牢,地动山摇,惭愧惭愧!

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

TCPnet教程着重说这个问题了,以太网描述符必须配置Device或者Strongly order模式。
页: [1]
查看完整版本: H7下RL-NET任务优先级的问题?PING延迟不稳定