硬汉嵌入式论坛

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

[SRAM] 使用STM32H7的AXI SRAM,SRAM1到SRAM4对应的Cache最高性能和最低性能配置

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2020-8-11 11:54:19 | 显示全部楼层 |阅读模式

最低性能配置就跟使用F1,F4的RAM没区别了,读Cache和写Cache全部关闭。
最高性能配置是读Cache和写Cache全开。

  1.     /* 最高性能,读Cache和写Cache都开启 */        
  2. #if 1
  3.         /* 配置AXI SRAM的MPU属性为Write back, Read allocate,Write allocate */
  4.         MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
  5.         MPU_InitStruct.BaseAddress      = 0x24000000;
  6.         MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
  7.         MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  8.         MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
  9.         MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
  10.         MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
  11.         MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
  12.         MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
  13.         MPU_InitStruct.SubRegionDisable = 0x00;
  14.         MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

  15.         HAL_MPU_ConfigRegion(&MPU_InitStruct);

  16.     /* 最低性能,读Cache和写Cache都关闭 */
  17. #else
  18.         /* 配置AXI SRAM的MPU属性为NORMAL, NO Read allocate,NO Write allocate */
  19.         MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
  20.         MPU_InitStruct.BaseAddress      = 0x24000000;
  21.         MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
  22.         MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  23.         MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
  24.         MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
  25.         MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
  26.         MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
  27.         MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
  28.         MPU_InitStruct.SubRegionDisable = 0x00;
  29.         MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

  30.         HAL_MPU_ConfigRegion(&MPU_InitStruct);
  31. #endif
复制代码



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-8-11 12:05:31 | 显示全部楼层
新版的ThreadX GUIX模板准备使用512KB的AXI SARM做主RAM,主要考虑到这个空间比较大,可以放开的玩。
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-8-11 15:35:11 | 显示全部楼层
硬汉大哥,H7上跑ThreadX,可以试试它的Module,开启MPU,玩玩!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-8-11 15:39:38 | 显示全部楼层
morning_enr6U 发表于 2020-8-11 15:35
硬汉大哥,H7上跑ThreadX,可以试试它的Module,开启MPU,玩玩!

动态加载必搞项,先把GUIX搞起来。
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2020-8-11 16:48:11 | 显示全部楼层
morning_enr6U 发表于 2020-8-11 15:35
硬汉大哥,H7上跑ThreadX,可以试试它的Module,开启MPU,玩玩!

老铁玩起来了?
代码不规范,亲人两行泪!
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2021-6-23 14:35:54 | 显示全部楼层
实际测试发现,H7工程中,在main函数起始处只要打开cache,即使不配置MPU(即not cacheable)整个程序运行速度就有明显提升,这个就是你说的最低性能吗?这种设置和不开cache有什么区别呢?
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2021-6-23 14:37:15 | 显示全部楼层
实测发现只开cache不配置MPU,执行速度就能大大提升,这个怎么解释?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-6-23 14:40:45 | 显示全部楼层
xxx0623 发表于 2021-6-23 14:37
实测发现只开cache不配置MPU,执行速度就能大大提升,这个怎么解释?

使用了那个空间,推荐一定要配置,不配置的话,他有个上电默认的配置状态。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2021-6-23 15:01:41 | 显示全部楼层
eric2013 发表于 2021-6-23 14:40
使用了那个空间,推荐一定要配置,不配置的话,他有个上电默认的配置状态。

我想默认配置就是not cacheable吧,因为如果我配置为开启即cacheable,那么被DMA访问的内存里面会出现一致性问题的。

但是我的疑惑是,我使用MPU默认配置或者主动配置为not cacheable之后,开启cache仍然可以让程序执行速度变快,这个是为什么呢?是因为CPU访问SRAM区域之外的空间也会默认用到cache加速吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-6-23 15:40:39 | 显示全部楼层
xxx0623 发表于 2021-6-23 15:01
我想默认配置就是not cacheable吧,因为如果我配置为开启即cacheable,那么被DMA访问的内存里面会出现一 ...

执行的什么程序, 访问的SRAM之外区域是指什么
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2021-6-23 16:13:47 | 显示全部楼层
eric2013 发表于 2021-6-23 15:40
执行的什么程序, 访问的SRAM之外区域是指什么

谢谢回复。
执行的是DMA中断程序里面的代码。
访问的SRAM之外区域:从反汇编来看,很多语句并没有和SRAM进行数据交互(比如操作R0、R1等等),是否打开cache后,也会被加速运行?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-6-24 07:35:43 | 显示全部楼层
xxx0623 发表于 2021-6-23 14:35
实际测试发现,H7工程中,在main函数起始处只要打开cache,即使不配置MPU(即not cacheable)整个程序运行 ...

这个不是最低性能,这个最少读Cache是开的,手册里面有个上电后默认的MPU配置策略的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-6-24 07:36:34 | 显示全部楼层
xxx0623 发表于 2021-6-23 14:37
实测发现只开cache不配置MPU,执行速度就能大大提升,这个怎么解释?

这个你看下H7上电后的默认MPU配置策略就知道了。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2021-6-24 09:37:07 | 显示全部楼层
eric2013 发表于 2021-6-24 07:36
这个你看下H7上电后的默认MPU配置策略就知道了。

贴以下我的配置代码:
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
    MPU_InitStruct.BaseAddress      = (0x20000000);
    MPU_InitStruct.Size             = MPU_REGION_SIZE_512MB;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);

只要这样配置或者直接不配置MPU,代码执行速度都能够大大提升。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-6-24 10:13:00 | 显示全部楼层
xxx0623 发表于 2021-6-24 09:37
贴以下我的配置代码:
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.Numbe ...

这个是TCM地址空间(前128KB),本来速度就和内核一样,都是480MHz。

无需做Cache配置,你配置后反倒把性能拉低了。Cache应该配置AXI SARAM这类的。
回复

使用道具 举报

2

主题

21

回帖

27

积分

新手上路

积分
27
发表于 2021-9-24 17:04:33 | 显示全部楼层
eric2013 发表于 2020-8-11 12:05
新版的ThreadX GUIX模板准备使用512KB的AXI SARM做主RAM,主要考虑到这个空间比较大,可以放开的玩。

用AXI SARM做主闪存   这个模板什么时候发布
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-9-25 09:42:25 | 显示全部楼层
Ttf18610977782 发表于 2021-9-24 17:04
用AXI SARM做主闪存   这个模板什么时候发布

这个里面发的的应该都是

第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第48章(2021-09-13)
http://www.armbbs.cn/forum.php?m ... 8429&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 10:03 , Processed in 0.380278 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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