为了加深对raw os 的MPU内存保护模块的理解,感觉有必要像大家解释清楚什么叫MPU。只有正确认识了MPU,才能最有效地运用到实战中去。 对于arm cpu , MPU模块目前主要使用在cortex-m3 以及cortex-m4的cpu中,这两种cpu都是属于arm7m 的架构。 首先一个正确的思路是下载合适的cpu体系架构文档,然后参阅其中的章节。做到学习新事物以官方文档为主。 进入以下网站地址: 然后下载文档:
这样参考的资料就有了。 打开下载的手册翻到:
可以看到B3.5这一个章节解释了所有MPU内存保护模块的内容。下面就这些内容将解释一些关键性的内容。 系统主要运行在两种模式,第一种是特权模式,第二种是非特权模式(用户模式)。MPU所有的工作都是围绕这两个展开的。MPU保护模块主要是把内存分成region, arm v7m支持的region个数有8个。MPU最小能支持32字节的region, 这样整个4G空间可以最高被划分成8块,每块的权限特性都可以被设置。 MPU最主要的一个特性是没有虚拟地址的特性,所以cpu不需要做虚拟地址到物理地址的转换,所以在软件上省去了软件设置,交换page table等动作,使得整个系统的时间是可预测的,而且软件的执行效率大大提高。 MPU实现了什么功能呢?下图是MPU的一个内部寄存器名字叫: MPU_RASR
可以看到这个寄存器内部有AP这两位,具体的含义如下:
上面表格很清楚,通过设置AP这3位,完全可以控制特权模式和非特权模式(用户模式)的读写权限。 至于其它的寄存器功能,手册上已经写得很清楚了,静下心来琢磨下,下载官网的
通过以上的模拟(需要安装keil mdk), 能够快速的掌握MPU的使用方法。
|