本帖最后由 让我看看各位 于 2026-7-10 10:04 编辑
问题解决了 , 感谢GD原厂的"江将"工程师 , 感谢论坛的 "可乐狂魔"
这个问题在咱们论坛中的:https://forum.anfulai.cn/forum.p ... =1&extra=#pid354786
也是"可乐狂魔"提出的解决方法 ,经过测试确实解决了问题;
解决方法:
配置MPU时 ,先在1组将所有空间都进行保护 ,然后再配置用到的空间 ,将下面代码放到1组 ,且当前的mpu配置从2组开始顺延
mpu_region_init_struct mpu_init_struct;
/* disable MPU */
ARM_MPU_Disable();
mpu_init_struct.region_number = MPU_REGION_NUMBER0;
mpu_init_struct.region_base_address = 0x00000000U;
mpu_init_struct.instruction_exec = MPU_INSTRUCTION_EXEC_NOT_PERMIT;
mpu_init_struct.access_permission = MPU_AP_NO_ACCESS;
mpu_init_struct.tex_type = MPU_TEX_TYPE0;
mpu_init_struct.access_shareable = MPU_ACCESS_SHAREABLE;
mpu_init_struct.access_cacheable = MPU_ACCESS_NON_CACHEABLE;
mpu_init_struct.access_bufferable = MPU_ACCESS_NON_BUFFERABLE;
mpu_init_struct.subregion_disable = 0x87;
mpu_init_struct.region_size = MPU_REGION_SIZE_4GB;
mpu_region_config(&mpu_init_struct);
mpu_region_enable();
/* enable MPU */
ARM_MPU_Enable(MPU_MODE_PRIV_DEFAULT);
针对这个问题 : GD32H7官方的缺陷文档和软件变成手册 没有记录这个问题
ST32H7的官方资料中 ,有这相关的一句话 :STM32H7R7/S7图形处理性能 | TouchGFX Documentation 中的MPU配置中
"MPU 配置内存保护单元 (MPU) 用于保护存储区域,防止非预期的内存访问和执行操作。
在Arm® Cortex®-M7处理器上,必须防止对外部存储器的推测性访问,否则可能引发高延迟或系统错误。 对于STM32H7R/S,这将影响访问内存的AXI主设备,并显著降低图形性能。
MPU可通过控制可访问的地址范围来防止推测性读取访问。 最简单的方法是使用包含整个内存区域的背景区域,通过将其设置为“强排序,永不执行”来限制访问。 背景区域应定义在默认区域ID-1中,因为所有其他区域的优先级都将高于此区域。 然后,应为需要访问的内存区域定义具有相应设置的其他MPU区域。 在STM32H7R/S上最多可定义16个区域。
"
|