打印
[STM32H7]

片上RAM读写顺序怪怪的,是不是Cache没关?

[复制链接]
457|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Uriah|  楼主 | 2025-5-7 07:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有时候变量赋值后读取还旧值,是不是H7系列的Cache搞鬼?

使用特权

评论回复
沙发
Clyde011| | 2025-5-7 07:34 | 只看该作者
有些编译器会提前执行表达式,要注意顺序。

使用特权

评论回复
板凳
公羊子丹| | 2025-5-7 07:34 | 只看该作者
H7的Cache要手动清理/失效。

使用特权

评论回复
地板
周半梅| | 2025-5-7 07:35 | 只看该作者
DMA写的东西CPU不一定能立马读到。

使用特权

评论回复
5
帛灿灿| | 2025-5-7 07:36 | 只看该作者
我在访问前加了__DSB()就对了。

使用特权

评论回复
6
童雨竹| | 2025-5-7 07:37 | 只看该作者
看下是不是用了DTCM还是SRAM1?

使用特权

评论回复
7
万图| | 2025-5-7 07:38 | 只看该作者
变量要加volatile不然优化会乱。

使用特权

评论回复
8
Wordsworth| | 2025-5-7 07:38 | 只看该作者
Cache开启后有些buffer要设置non-cache。

使用特权

评论回复
9
Bblythe| | 2025-5-7 07:39 | 只看该作者
你试过手动清cache区域吗?

使用特权

评论回复
10
Pulitzer| | 2025-5-7 07:40 | 只看该作者
好像也有内存映射区域能避免Cache干扰。

使用特权

评论回复
11
Uriah|  楼主 | 2025-5-7 07:41 | 只看该作者
我用MPU配置出错后全程怪异。

使用特权

评论回复
12
江河千里| | 2025-5-12 14:41 | 只看该作者
     STM32H7的Cortex-M7内核包含数据缓存(D-Cache)和指令缓存(I-Cache)。D-Cache会缓存RAM数据以提高访问速度

使用特权

评论回复
13
别乱了阵脚| | 2025-5-12 14:42 | 只看该作者
在STM32H7系列中,片上RAM读写顺序异常或变量赋值后读取旧值,极有可能是Cache未正确处理导致

使用特权

评论回复
14
光辉梦境| | 2025-5-12 16:06 | 只看该作者
数据不一致,CPU修改缓存中的数据后,若未及时同步到RAM,其他外设(如DMA)或CPU后续读取时可能获取旧值

使用特权

评论回复
15
三生万物| | 2025-5-12 17:43 | 只看该作者
     变量读取异常,若变量所在内存区域被缓存,赋值后CPU可能直接从缓存读取,而缓存未更新时即返回旧值。

使用特权

评论回复
16
暖了夏天蓝了海| | 2025-5-12 18:00 | 只看该作者
     DMA传输与CPU共享数据,DMA直接操作RAM,若CPU未清理缓存,可能读取到缓存中的旧数据。

使用特权

评论回复
17
一秒落纱| | 2025-5-12 18:32 | 只看该作者
    变量频繁修改,高频写入的变量若被缓存,可能导致读取时未反映最新值。

使用特权

评论回复
18
淡漠安然| | 2025-5-12 18:50 | 只看该作者
写回模式下,数据仅写入缓存,未同步到RAM,直到缓存行被替换或显式清理。

使用特权

评论回复
19
夜阑风雨| | 2025-5-12 19:00 | 只看该作者
  缓存未失效,CPU读取时,若缓存中存在旧数据且未标记为无效,则直接返回旧值。

使用特权

评论回复
20
zchong| | 2025-5-12 19:54 | 只看该作者
具体说说,不应该是cache的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

5136

帖子

1

粉丝