最近工程中遇到的一些问题,做个笔记
M7的共享内存不能是0x3000_0000开头的SRAM1,因为如果让这个地址写东西,就相当于覆盖了M4的RAM(0x1000_0000),
实验现象是,我M7内核往0x3000_0000写数据,结果M4的SystemD2Clock全局变量和struBitOutput_M4会默认的被修改,struBitOutput_M4被修改,所以Q01被输出,软启动莫名开启。

手册上的一些说明:
M7运行内存(0x2400_0000到0x2407_FFFF)一共512K
M4运行内存(0x1000_0000到0x1004_7FFF)一共288K,
SRAM1(0x3000_0000到0x3000_1FFFF)一共有128K
SRAM2,(0x3000_2000到0x3000_3FFFF)一共有128K,
SRAM4(0x3800_000 到 0x3800_ FFFF)一共64K。
DTCM(0x2000_000 到 0x2001_FFFF)一共128K。
(数据TCM,400M速度,只能CM7用,不能用DMA.)
ITCM(0x0000_000 到 0x0000_FFFF)未用,一共64K。
(指令TCM,400M速度,只能CM7用).


注意:
M4内核所使用的SRAM(alias)是 0x1000_0000开始的地址,注意有alias
而这个地址是SRAM(0x3000_0000)开始的地址映射(别名)过去的
也就是说,M4用的就是地址0x3000_0000开始的SRAM,只不过是映射的不一样,
所以用SRAM做共享内存的时候,注意不要和M4用的内存冲突。
在工程实践中,遇到STM32H745xI微控制器的M7内核使用SRAM作为共享内存时,必须避免地址0x3000_0000,因为它会覆盖M4内核的RAM。M7的内存范围为0x2400_0000到0x2407_FFFF,而M4的内存为0x1000_0000到0x1004_7FFF。SRAM1和SRAM2各128K,SRAM4 64K,DTCM和ITCM分别用于M7。为防止地址冲突,共享内存分配需谨慎。
2888

被折叠的 条评论
为什么被折叠?



