STM32H7视频教程第14期:超干货,MPU和Cache实战,一张图了解所有经典配置案例,争取人人都可以玩溜(2022-05-08)
本期视频给大家带来Cortex-M7内核MPU和Cache实战,各种经典常见案例分析。视频:
https://www.bilibili.com/video/BV1p54y1f7CY
https://www.bilibili.com/video/BV1p54y1f7CY?share_source=copy_web
一张图了解所有常见配置案例(可以点击放大)。
https://img.alicdn.com/imgextra/i1/299314119/O1CN010IKuTl1gIY9PCXNXb_!!299314119.png
更新完毕。 {:34:} {:34:} 非常好,真正的具有项目参考价值 ou513 发表于 2022-5-8 10:33
非常好,真正的具有项目参考价值
{:33:}
可以可以,就是我上次建议的那种形式{:34:} 对于STM32F4系列的核是M4,没有CACHE,MPU配置是不是就不要打开C,B位了?
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
编程手册里推荐是打开缓存,糊涂了
lindahnu 发表于 2022-9-6 11:32
对于STM32F4系列的核是M4,没有CACHE,MPU配置是不是就不要打开C,B位了?
MPU_Ini ...
F4没有Cache,开不开C不起作用。 如果CPU需要修改一个RAM地址的数据,数据放在Cache中,还没有修改RAM,但是此时如果DMA将另外一个地址的RAM数据覆盖此地址的RAM,用户在启动DMA前使用了SCB_CleanDCache_by_Addr,那么,Cache中的数据会马上发送给RAM,然后DMA直接修改RAM的数据,如果,我说如果用户的程序进入了某个中断然后又调用了一次SCB_CleanDCache_by_Addr,那么此时Cache中的数据就会再次写到RAM,那么此时RAM的数据表现就是DMA传输失败了 如果CPU需要修改一个RAM地址的数据,数据放在Cache中,还没有修改RAM,但是此时如果DMA将另外一个地址的RAM数据覆盖此地址的RAM,用户在启动DMA前使用了SCB_CleanDCache_by_Addr,那么,Cache中的数据会马上发送给RAM,然后DMA直接修改RAM的数据,如果,我说如果用户的程序进入了某个中断然后又调用了一次SCB_CleanDCache_by_Addr,那么此时Cache中的数据就会再次写到RAM,那么此时RAM的数据表现就是DMA传输失败了 蜗牛 发表于 2023-7-28 15:53
如果CPU需要修改一个RAM地址的数据,数据放在Cache中,还没有修改RAM,但是此时如果DMA将另外一个地址的RAM ...
实际上这是两个数据一致性问题了。
1、首先是DMA和CPU操作这个RAM区。
2、然后就是中断抢占修,对于中断抢占修改,这个需要做好互斥操作。因为中断里面和中断外都有操作变量。 我把SDRAM的图片旋转90度写到内部AXIRAM,sdram连续读AXIRAM跳跃式写。AXIRAM读写cache都打开耗时约7.9ms,如果都不打开或者只打开读耗时约5.2ms,问一下版主这个正常吗? xy201207 发表于 2023-8-21 15:04
我把SDRAM的图片旋转90度写到内部AXIRAM,sdram连续读AXIRAM跳跃式写。AXIRAM读写cache都打开耗时约7.9ms, ...
SDRAM的读写Cache是不是没开。
然后这个没理解“我把SDRAM的图片旋转90度写到内部AXIRAM,sdram连续读AXIRAM跳跃式写” 这个是两个操作还是一个操作。 SDRAM的MPU属性为Write through, read allocate,no write allocate。p_des是内部AXIRAM,p_src是外部SDRAM.修改内部AXIRAM的MPU属性WB或者WT或者关闭读写cache,发现WB属性耗时最长约8ms,WT和关闭读写cache差不多耗时5ms. 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:
/* 配置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次看看
1.WB是按照例程配置的,只是最后一个参数我是用的MPU_INSTRUCTION_ACCESS_DISABLE。
2.我关闭中断再试试。
会不会是CPU一直在分配cahce,然后我又是在跳跃式写,又无法命中导致还慢来了一点。:lol xy201207 发表于 2023-8-23 10:22
1.WB是按照例程配置的,只是最后一个参数我是用的MPU_INSTRUCTION_ACCESS_DISABLE。
2.我关闭中断再试试。 ...
可以考虑使用MDMA或者DMA2D做数据复制粘贴。在AXI SRAM比CPU快
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109765&highlight=%B5%BD%B5%D7%2B%BC%D3%CB%D9
https://img.alicdn.com/imgextra/i4/299314119/O1CN01ScqQdH1gIY7Dqmv5S_!!299314119.png
不开启 Cache,不开启MPU 此时内存属性是什么样的?,,是normal模式吗?? qq1646544 发表于 2023-10-31 11:53
不开启 Cache,不开启MPU 此时内存属性是什么样的?,,是normal模式吗??
芯片上电后的默认属性
https://img.anfulai.cn/dz/attachment/forum/201811/09/023853o2rwsw2vzwn85p2s.png
https://img.anfulai.cn/dz/attachment/forum/201811/09/023854uc74rzk4cslxmj97.png
大佬,讲得真好{:8:}
页:
[1]