片上RAM读写顺序怪怪的,是不是Cache没关?
有时候变量赋值后读取还旧值,是不是H7系列的Cache搞鬼?有些编译器会提前执行表达式,要注意顺序。 H7的Cache要手动清理/失效。 DMA写的东西CPU不一定能立马读到。 我在访问前加了__DSB()就对了。 看下是不是用了DTCM还是SRAM1? 变量要加volatile不然优化会乱。 Cache开启后有些buffer要设置non-cache。 你试过手动清cache区域吗? 好像也有内存映射区域能避免Cache干扰。 我用MPU配置出错后全程怪异。 STM32H7的Cortex-M7内核包含数据缓存(D-Cache)和指令缓存(I-Cache)。D-Cache会缓存RAM数据以提高访问速度
在STM32H7系列中,片上RAM读写顺序异常或变量赋值后读取旧值,极有可能是Cache未正确处理导致
数据不一致,CPU修改缓存中的数据后,若未及时同步到RAM,其他外设(如DMA)或CPU后续读取时可能获取旧值
变量读取异常,若变量所在内存区域被缓存,赋值后CPU可能直接从缓存读取,而缓存未更新时即返回旧值。 DMA传输与CPU共享数据,DMA直接操作RAM,若CPU未清理缓存,可能读取到缓存中的旧数据。
变量频繁修改,高频写入的变量若被缓存,可能导致读取时未反映最新值。
写回模式下,数据仅写入缓存,未同步到RAM,直到缓存行被替换或显式清理。
缓存未失效,CPU读取时,若缓存中存在旧数据且未标记为无效,则直接返回旧值。
具体说说,不应该是cache的问题
页:
[1]