硬汉嵌入式论坛

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

[BSP视频教程] STM32H7视频教程第14期:超干货,MPU和Cache实战,一张图了解所有经典配置案例,争取人人都可以玩溜(2022-05-08)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
发表于 2022-5-8 00:54:18 | 显示全部楼层 |阅读模式
本期视频给大家带来Cortex-M7内核MPU和Cache实战,各种经典常见案例分析。


视频:

https://www.bilibili.com/video/BV1p54y1f7CY



一张图了解所有常见配置案例(可以点击放大)。





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2022-5-8 01:16:57 | 显示全部楼层
更新完毕。
回复

使用道具 举报

3

主题

1220

回帖

1229

积分

至尊会员

积分
1229
发表于 2022-5-8 10:25:18 | 显示全部楼层
回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2022-5-8 10:30:26 | 显示全部楼层
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
发表于 2022-5-8 10:33:54 | 显示全部楼层
非常好,真正的具有项目参考价值
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2022-5-8 14:47:21 | 显示全部楼层
ou513 发表于 2022-5-8 10:33
非常好,真正的具有项目参考价值

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2022-5-9 01:12:02 | 显示全部楼层
1213214324.png
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2022-5-9 08:47:18 | 显示全部楼层
可以可以,就是我上次建议的那种形式
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

55

主题

131

回帖

296

积分

高级会员

积分
296
发表于 2022-9-6 11:32:41 | 显示全部楼层
对于STM32F4系列的核是M4,没有CACHE,MPU配置是不是就不要打开C,B位了?
[C] 纯文本查看 复制代码
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;

编程手册里推荐是打开缓存,糊涂了

无标题.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2022-9-7 01:53:18 | 显示全部楼层
lindahnu 发表于 2022-9-6 11:32
对于STM32F4系列的核是M4,没有CACHE,MPU配置是不是就不要打开C,B位了?
[mw_shl_code=c,true]  MPU_Ini ...

F4没有Cache,开不开C不起作用。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-7-28 15:53:59 | 显示全部楼层
如果CPU需要修改一个RAM地址的数据,数据放在Cache中,还没有修改RAM,但是此时如果DMA将另外一个地址的RAM数据覆盖此地址的RAM,用户在启动DMA前使用了SCB_CleanDCache_by_Addr,那么,Cache中的数据会马上发送给RAM,然后DMA直接修改RAM的数据,如果,我说如果用户的程序进入了某个中断然后又调用了一次SCB_CleanDCache_by_Addr,那么此时Cache中的数据就会再次写到RAM,那么此时RAM的数据表现就是DMA传输失败了
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-7-28 15:54:17 | 显示全部楼层
如果CPU需要修改一个RAM地址的数据,数据放在Cache中,还没有修改RAM,但是此时如果DMA将另外一个地址的RAM数据覆盖此地址的RAM,用户在启动DMA前使用了SCB_CleanDCache_by_Addr,那么,Cache中的数据会马上发送给RAM,然后DMA直接修改RAM的数据,如果,我说如果用户的程序进入了某个中断然后又调用了一次SCB_CleanDCache_by_Addr,那么此时Cache中的数据就会再次写到RAM,那么此时RAM的数据表现就是DMA传输失败了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2023-7-28 18:55:38 | 显示全部楼层
蜗牛 发表于 2023-7-28 15:53
如果CPU需要修改一个RAM地址的数据,数据放在Cache中,还没有修改RAM,但是此时如果DMA将另外一个地址的RAM ...

实际上这是两个数据一致性问题了。
1、首先是DMA和CPU操作这个RAM区。
2、然后就是中断抢占修,对于中断抢占修改,这个需要做好互斥操作。因为中断里面和中断外都有操作变量。
回复

使用道具 举报

9

主题

103

回帖

130

积分

初级会员

积分
130
发表于 2023-8-21 15:04:08 | 显示全部楼层
我把SDRAM的图片旋转90度写到内部AXIRAM,sdram连续读AXIRAM跳跃式写。AXIRAM读写cache都打开耗时约7.9ms,如果都不打开或者只打开读耗时约5.2ms,问一下版主这个正常吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2023-8-22 08:52:57 | 显示全部楼层
xy201207 发表于 2023-8-21 15:04
我把SDRAM的图片旋转90度写到内部AXIRAM,sdram连续读AXIRAM跳跃式写。AXIRAM读写cache都打开耗时约7.9ms, ...

SDRAM的读写Cache是不是没开。

然后这个没理解“我把SDRAM的图片旋转90度写到内部AXIRAM,sdram连续读AXIRAM跳跃式写” 这个是两个操作还是一个操作。
回复

使用道具 举报

9

主题

103

回帖

130

积分

初级会员

积分
130
发表于 2023-8-22 14:59:19 | 显示全部楼层
SDRAM的MPU属性为Write through, read allocate,no write allocate。 sdram.png p_des是内部AXIRAM,p_src是外部SDRAM.修改内部AXIRAM的MPU属性WB或者WT或者关闭读写cache,发现WB属性耗时最长约8ms,WT和关闭读写cache差不多耗时5ms.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2023-8-23 08:29:40 | 显示全部楼层
xy201207 发表于 2023-8-22 14:59
SDRAM的MPU属性为Write through, read allocate,no write allocate。p_des是内部AXIRAM,p_src是外部SDRAM. ...

差的有点多
1、你的WB是这么配置吗,最高性能配置MPU_TEX_LEVEL1:

[C] 纯文本查看 复制代码
        /* 配置AXI SRAM的MPU属性为Write back, Read allocate,Write allocate */
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x24000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

        HAL_MPU_ConfigRegion(&MPU_InitStruct);


2、WB会有个回写,更新到实际RAM空间,还会回写到Cache中。WT和关闭Cache是直写。

你这个测试实际差距有点多,可以考虑测试前后关闭全局中断。测试100次看看
回复

使用道具 举报

9

主题

103

回帖

130

积分

初级会员

积分
130
发表于 2023-8-23 10:22:46 | 显示全部楼层
1.WB是按照例程配置的,只是最后一个参数我是用的MPU_INSTRUCTION_ACCESS_DISABLE。
2.我关闭中断再试试。
会不会是CPU一直在分配cahce,然后我又是在跳跃式写,又无法命中导致还慢来了一点。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2023-8-23 10:38:04 | 显示全部楼层
xy201207 发表于 2023-8-23 10:22
1.WB是按照例程配置的,只是最后一个参数我是用的MPU_INSTRUCTION_ACCESS_DISABLE。
2.我关闭中断再试试。 ...


可以考虑使用MDMA或者DMA2D做数据复制粘贴。在AXI SRAM比CPU快
https://www.armbbs.cn/forum.php? ... 5%D7%2B%BC%D3%CB%D9


回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-10-31 11:53:49 | 显示全部楼层
不开启 Cache,不开启MPU 此时内存属性是什么样的?,,是normal模式吗??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106534
QQ
 楼主| 发表于 2023-10-31 14:53:21 | 显示全部楼层
qq1646544 发表于 2023-10-31 11:53
不开启 Cache,不开启MPU 此时内存属性是什么样的?,,是normal模式吗??

芯片上电后的默认属性




回复

使用道具 举报

5

主题

43

回帖

58

积分

初级会员

stay hungry, stay foolish

积分
58
发表于 2024-4-6 16:29:37 | 显示全部楼层
大佬,讲得真好
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 01:19 , Processed in 0.276082 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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