硬汉嵌入式论坛

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

[以太网] 使用STM32H7+RTX5+TCPnet网速很快但ping的很慢

  [复制链接]

10

主题

33

回帖

63

积分

初级会员

积分
63
发表于 2019-8-19 13:49:04 | 显示全部楼层 |阅读模式
使用STM32H7+RTX5+TCPnet网速很快,但是ping的很慢要30ms,这不正常吧?哪些因素会影响ping呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-8-19 14:17:55 | 显示全部楼层
这个是KEIL提供的H7以太网CMSIS-Driver有bug导致的,等我近期发布我们V7的模板吧,已经解决这个问题了。
回复

使用道具 举报

3

主题

1228

回帖

1237

积分

至尊会员

积分
1237
发表于 2019-8-19 19:48:01 | 显示全部楼层
回复

使用道具 举报

10

主题

33

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2019-8-21 13:18:16 | 显示全部楼层
什么bug啊?提示一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-8-21 13:24:51 | 显示全部楼层
younew 发表于 2019-8-21 13:18
什么bug啊?提示一下

真是颓啊,STM32H7的以太网HAL库果然有bug,去年熬了几个晚上解决的bug,在HAL V1.4.0解决了
http://www.armbbs.cn/forum.php?m ... 3608&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

2

主题

29

回帖

35

积分

新手上路

积分
35
发表于 2019-8-24 09:13:26 | 显示全部楼层
哪里可以下载新的RL-TCP V7的模板工程,大家都在期盼?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-8-24 09:19:24 | 显示全部楼层
housping 发表于 2019-8-24 09:13
哪里可以下载新的RL-TCP V7的模板工程,大家都在期盼?

等我近期发布我们V7的模板吧
回复

使用道具 举报

13

主题

223

回帖

262

积分

高级会员

积分
262
发表于 2019-8-31 20:32:56 | 显示全部楼层
eric2013 发表于 2019-8-24 09:19
等我近期发布我们V7的模板吧

RL-TCP V7的模板工程,这个呼声很高啊,提高优先级发布吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-9-2 01:31:42 | 显示全部楼层
miaoqiongb 发表于 2019-8-31 20:32
RL-TCP V7的模板工程,这个呼声很高啊,提高优先级发布吧

争取早点
回复

使用道具 举报

10

主题

33

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2019-9-2 09:41:35 | 显示全部楼层
可是我用ST的1.5版的库,ping还是慢啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-9-2 12:17:15 | 显示全部楼层
younew 发表于 2019-9-2 09:41
可是我用ST的1.5版的库,ping还是慢啊

HAL库是解决的HAL的bug,而CMSIS-Driver要解决CMSIS-Driver,所ping依然慢很正常

我二楼的回复,再读一遍。
回复

使用道具 举报

10

主题

33

回帖

63

积分

初级会员

积分
63
 楼主| 发表于 2019-9-4 10:34:45 | 显示全部楼层
修改了MDK的驱动EMAC_STM32H7xx.c文件里的GetRxFrameSize函数
原来的代码是:
static uint32_t GetRxFrameSize (void) {
  uint32_t len;

  /* Clean and invalidate data cache */
  SCB_CleanInvalidateDCache();
  if (HAL_ETH_GetRxDataLength (Emac.h, &len) == HAL_OK) {
    return (len);
  }
  /* No data available */
  return (0);
}

修改后的代码是:

static uint32_t GetRxFrameSize (void) {
  uint32_t len;
  ETH_BufferTypeDef rx_buf;

  if(HAL_ETH_GetRxDataBuffer(Emac.h, &rx_buf)== HAL_OK)//增加,先判断有没有收到数据,再取数据长度.//TODO:这样做会不会有别的问题呢???
  {
    if (HAL_ETH_GetRxDataLength (Emac.h, &len) == HAL_OK) {
      SCB_CleanInvalidateDCache();
      return (len);
    }
  }
  /* No data available */
  return (0);
}
修改后ping的速度明显加快,每次ping4次,有3次<1ms,但是总有一次是几百ms到两千多ms甚至超时,变化范围很大。修改之前每次都是30ms很一致。
这是什么问题啊?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-9-4 10:41:23 | 显示全部楼层
younew 发表于 2019-9-4 10:34
修改了MDK的驱动EMAC_STM32H7xx.c文件里的GetRxFrameSize函数
原来的代码是:
static uint32_t GetRxFram ...

没有修改对
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 05:36 , Processed in 0.190693 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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