Uriah 发表于 2025-5-7 07:32

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

有时候变量赋值后读取还旧值,是不是H7系列的Cache搞鬼?

Clyde011 发表于 2025-5-7 07:34

有些编译器会提前执行表达式,要注意顺序。

公羊子丹 发表于 2025-5-7 07:34

H7的Cache要手动清理/失效。

周半梅 发表于 2025-5-7 07:35

DMA写的东西CPU不一定能立马读到。

帛灿灿 发表于 2025-5-7 07:36

我在访问前加了__DSB()就对了。

童雨竹 发表于 2025-5-7 07:37

看下是不是用了DTCM还是SRAM1?

万图 发表于 2025-5-7 07:38

变量要加volatile不然优化会乱。

Wordsworth 发表于 2025-5-7 07:38

Cache开启后有些buffer要设置non-cache。

Bblythe 发表于 2025-5-7 07:39

你试过手动清cache区域吗?

Pulitzer 发表于 2025-5-7 07:40

好像也有内存映射区域能避免Cache干扰。

Uriah 发表于 2025-5-7 07:41

我用MPU配置出错后全程怪异。

江河千里 发表于 2025-5-12 14:41

   STM32H7的Cortex-M7内核包含数据缓存(D-Cache)和指令缓存(I-Cache)。D-Cache会缓存RAM数据以提高访问速度

别乱了阵脚 发表于 2025-5-12 14:42

在STM32H7系列中,片上RAM读写顺序异常或变量赋值后读取旧值,极有可能是Cache未正确处理导致

光辉梦境 发表于 2025-5-12 16:06

数据不一致,CPU修改缓存中的数据后,若未及时同步到RAM,其他外设(如DMA)或CPU后续读取时可能获取旧值

三生万物 发表于 2025-5-12 17:43

   变量读取异常,若变量所在内存区域被缓存,赋值后CPU可能直接从缓存读取,而缓存未更新时即返回旧值。

暖了夏天蓝了海 发表于 2025-5-12 18:00

   DMA传输与CPU共享数据,DMA直接操作RAM,若CPU未清理缓存,可能读取到缓存中的旧数据。

一秒落纱 发表于 2025-5-12 18:32

    变量频繁修改,高频写入的变量若被缓存,可能导致读取时未反映最新值。

淡漠安然 发表于 2025-5-12 18:50

写回模式下,数据仅写入缓存,未同步到RAM,直到缓存行被替换或显式清理。

夜阑风雨 发表于 2025-5-12 19:00

缓存未失效,CPU读取时,若缓存中存在旧数据且未标记为无效,则直接返回旧值。

zchong 发表于 2025-5-12 19:54

具体说说,不应该是cache的问题
页: [1]
查看完整版本: 片上RAM读写顺序怪怪的,是不是Cache没关?