我想保护内存区域不被写入。我配置了MPU,但没有产生任何故障。 我要保护的区域的基地址是0x20000000。区域大小为64字节。
这是一个演示此问题的编译代码。
_ | _ | _ | _ | _ | _ | _ | _ a
_ | _ | X | _ | X | _ | _ | _ b
_ | X | _ | _ | _ | X | _ | _ c
_ | _ | _ | _ | _ | _ | _ | _ d
_ | X | _ | _ | _ | X | _ | _ e
_ | _ | X | _ | X | _ | _ | _ f
_ | _ | _ | _ | _ | _ | _ | _ g
_ | _ | _ | _ | _ | _ | _ | _ h
因此,在main函数中,我在限制区域写入,即0x20000000,但MPU没有产生任何错误,而是调用MemManage_Handler(),而是成功写入。
答案 0 :(得分:0)
这对我来说很好看。确保您的硬件具有MPU。 MPU有一个名为MPU_TYPE Register的寄存器。这是一个只读寄存器,可以告诉您是否有MPU。如果MPU_TYPE寄存器中的位15:8读为0,则没有MPU。
在处理寄存器时永远不要使用数字。这使您和其他人很难阅读您的代码。相反,定义一些位掩码。请参阅有关如何执行此操作的教程。