OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5206|回复: 6

阿波罗H743套装的以太网还是经得起考验的.

[复制链接]

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2019-1-29
在线时间
67 小时
发表于 2019-3-6 10:29:21 | 显示全部楼层 |阅读模式
目前测试的结果,

跑满100Mbps没问题 , 用的LWIP NO_SYS模式. 虽然外面套了个RTX5

进行32个任务的压力测试, 每秒可收或发8000个数据包.

昨晚用LWIP 2.0.03测试了2亿次的收发, LWIP出错了.  今天换2.1.2继续测.

test1.png

就是还有DCache的问题尚未解决.  开启DCache后, 即使强制透写, 使用SCB_InvalidateDCache这些方法.

因为目前MPU还摸不透, 总出错, 停用了, 把DMA数据放在SRAM2里, 没有MPU设置, 一开DCache就出问题.

停用DCache, 程序性能下降了30%...

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2017-2-14
在线时间
90 小时
发表于 2019-3-6 11:55:18 | 显示全部楼层
我也喜欢做压力测试,但是实际项目下,没有那么多数据包的...
回复 支持 1 反对 1

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2019-1-29
在线时间
67 小时
 楼主| 发表于 2019-3-6 16:18:55 | 显示全部楼层
Polychromatic 发表于 2019-3-6 11:55
我也喜欢做压力测试,但是实际项目下,没有那么多数据包的...

不好意思. 不熟悉论坛的按钮. 按回复按错成反对了. 还不能取消..

就是想知道一下极限多少, 心理有数.

而且做做测试还能找到自己的代码的bug, 已经修正了很多地方了.

目前还有问题, 希望能弄得更稳定点.

如果能把DCache也兼容了那就更好了.
回复 支持 反对

使用道具 举报

9

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2017-2-14
在线时间
90 小时
发表于 2019-3-7 11:25:13 | 显示全部楼层
哈哈哈,没关系,我这个回复也没什么可以反对的。
你说的对,确实可以测试得到BUG,还要很多不知道的问题,挺有意义的。

加油!
回复 支持 反对

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2019-1-29
在线时间
67 小时
 楼主| 发表于 2019-3-12 14:43:46 | 显示全部楼层
本帖最后由 ZHDX 于 2019-3-12 15:27 编辑

今天终于搞通了DCache , 写下一些经验.

这两个指令是设置数组, 数组占用的内存不多, 但是都是必须是可以DMA访问的,  这段内存必须使用 MPU_ACCESS_NOT_CACHEABLE
  heth.Init.TxDesc = DMATxDscrTab;
  heth.Init.RxDesc = DMARxDscrTab;

之前就是忽略了这个,  总以为只有buffer才需要DMA读写,  没考虑过这两个数组也是被DMA读写修改掉.

而自动生成里的 ethernetif.c 里的 SCB_CleanInvalidateDCache() 的使用是默认有的了. 就不细说了.

因为我用的是gnu编译器, 所以__attribute__是这种模式
ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection")));   /* Ethernet Tx DMA Descriptors */

需要自己做一个sct文件, 把这两个放进SRAM3内, (目的是分区方便MPU操作)
  SRAM3 0x30040000 32768  {
        * (.RxDecripSection)
        * (.TxDecripSection)
  }

MPU代码为

  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  MPU_InitStruct.BaseAddress = 0x30040000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;
  MPU_InitStruct.SubRegionDisable = 0x0;
        MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
        MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
        MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
        MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);


----

经过这些步骤, DCache成功开启并兼容ETH了, CPU使用率大幅度下降,

这100Mbps的网络每秒竟然可以收或发11200个包.  
(测试TCP连接收或发100次就关闭重连, 如不关闭重连, 则达到了每秒17000次)

下一步是优化 SCB_CleanInvalidateDCache() , 改为 SCB_CleanInvalidateDCache_by_Addr



回复 支持 反对

使用道具 举报

0

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2019-3-4
在线时间
4 小时
发表于 2019-3-13 16:11:08 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5262
金钱
5262
注册时间
2012-8-25
在线时间
1025 小时
发表于 2020-1-9 13:38:36 | 显示全部楼层
留名,DCache
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-11 13:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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