硬汉嵌入式论坛

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

[MPU] 关于MPU配置 Write allocate 疑问

[复制链接]

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2023-6-21 17:03:47 | 显示全部楼层 |阅读模式
教程中写:如果没有,就用到配置 write allocate 了,意思就是 CPU 写到往 SRAM 里面的数据,会同步在 Cache 里面开辟一个空间将 SRAM 中写入的数据加载进来,如果此时立即读此 SRAM 区,那么就会有很大的速度优势。

网上查询资料:写,若miss,先把要写的数据载入到Cache中,写Cache,然后再通过flush方式写入到内存中;

疑问:写,若miss,这个时候会在cache里面开辟空间,然后把要写的数据写入Cache中,那么这个时候会同步也把数据写入SRAM中去吗?看教程中的话,会同步写Cache和SRAM,但是网上资料看又不会同步写;这点给我搞懵逼了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2023-6-22 11:10:42 | 显示全部楼层
Write allocate情况下,写miss的话,会把数据直接写入到对应的地址空间,开辟的这个Cache空间会从这个地址空间加载数据,这就是所谓的write back的含义回写。

回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-24 00:03:19 | 显示全部楼层
eric2013 发表于 2023-6-22 11:10
Write allocate情况下,写miss的话,会把数据直接写入到对应的地址空间,开辟的这个Cache空间会从这个地址 ...

谢谢老大
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-25 11:14:53 | 显示全部楼层
eric2013 发表于 2023-6-22 11:10
Write allocate情况下,写miss的话,会把数据直接写入到对应的地址空间,开辟的这个Cache空间会从这个地址 ...

老大,上电默认如果不对某个区域配置mpu,那么比如AXI SRAM区域是相当于Non-cacheable吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2023-6-25 11:54:06 | 显示全部楼层
sanit 发表于 2023-6-25 11:14
老大,上电默认如果不对某个区域配置mpu,那么比如AXI SRAM区域是相当于Non-cacheable吗?

STM32H7上电后默认的MPU属性
https://www.armbbs.cn/forum.php? ... 0109&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-26 10:56:49 | 显示全部楼层
eric2013 发表于 2023-6-22 11:10
Write allocate情况下,写miss的话,会把数据直接写入到对应的地址空间,开辟的这个Cache空间会从这个地址 ...

老大,配置 Write back,read allocate,write allocate,写miss的话,是先开辟cache空间,然后把数据直接写进cache,并不会同时写入sram。这个是我实验结果,跟教程说的确实有冲突,老大可以试试;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2023-6-26 11:14:41 | 显示全部楼层
sanit 发表于 2023-6-26 10:56
老大,配置 Write back,read allocate,write allocate,写miss的话,是先开辟cache空间,然后把数据直 ...

这个测试并不能说明是写miss后开启的Cache空间,直写Cache。

你可以关闭read allocate测试。
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-26 11:43:36 | 显示全部楼层
本帖最后由 sanit 于 2023-6-26 13:38 编辑

eric2013 发表于 2023-6-26 11:14
这个测试并不能说明是写miss后开启的Cache空间,直写Cache。

你可以关闭read allocate测试。


我配置了2个区域A和B,各8KB空间。A的属性是Write back,read allocate,write allocate,B的属性是Non-cacheable;
然后开始之前SCB_CleanInvalidateDCache();  
第一步:CPU全写A区域为0x11和B区域0x22; 【写miss,写A区域会开辟cache,直接写A区域对应的cache,不会同步写SRAM,写B区域是直接写SRAM】
第二步:CPU读A区域和B区域,结果跟写入的一致;【读A区域是直接读A区域对应的cache,读B区域是直接读SRAM】
第三步:CPU写A区域数据为0xA5数据;【写命中,写A区域是直接写A区域对应的cache,不会同步写SRAM
第四步:MDMA将前面A区域数据拷贝到B区域;【DMA将A区域数据搬运到B区域,此时搬运的是A区域真实SRAM的数据,而不是cache数据】
第五步:CPU读A区域和B区域数据【读A区域是直接读A区域对应的cache,读B区域是直接读SRAM】
第五步结果:
读A区域跟写入是一致,都是0xA5,因为读是直接读A区域对应的cache,而不管A区域真正SRAM区间数据;
读B区域全0,也就是说在第一步的时候,只写了cache,并没有写sram,所以第四步DMA搬运之后,B区域的sram数据是0,意味着A区域的sram数据是0;
也就是说第一步写miss的时候,只开辟了cache并写A区域对应的cache,没有写A区域对应的SRAM;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2023-6-26 15:10:28 | 显示全部楼层
sanit 发表于 2023-6-26 11:43
eric2013 发表于 2023-6-26 11:14
这个测试并不能说明是写miss后开启的Cache空间,直写Cache。

你的描述我还没看。
关闭read allocate,仅开启write allocate测试没,也测试下。然后我们交流
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-26 17:34:12 | 显示全部楼层
eric2013 发表于 2023-6-26 15:10
你的描述我还没看。
关闭read allocate,仅开启write allocate测试没,也测试下。然后我们交流

read allocate 怎么关闭呢   没找到方法
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-27 16:17:44 | 显示全部楼层
sanit 发表于 2023-6-26 17:34
read allocate 怎么关闭呢   没找到方法

注意,M7内核只要开启了Cache,read allocate就是开启的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2023-6-27 16:29:03 | 显示全部楼层
sanit 发表于 2023-6-27 16:17
注意,M7内核只要开启了Cache,read allocate就是开启的。

只能手动设置Cache的Clean和无效化确认了。

我这边就不测试了。


QQ截图20230627162856.png
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
 楼主| 发表于 2023-6-27 17:48:16 | 显示全部楼层
eric2013 发表于 2023-6-27 16:29
只能手动设置Cache的Clean和无效化确认了。

我这边就不测试了。

好的 谢谢老大百忙之中解决问题 感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 00:40 , Processed in 0.255269 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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