微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32f407 mpu问题咨询

stm32f407 mpu问题咨询

时间:10-02 整理:3721RD 点击:
大家好,小弟想问下有谁用过M4内核的mpu功能,是否有示例可以分享下,
或者MPU中的特权级代码和用户级代码是怎么区别,通过什么指令可以实现两者的跳转?
权威指南和用户手册都看了,貌似没找到,
谢谢

刚好做项目用过,用STM32F429的MPU。我感觉了CM3的MPU没差别。《Cortex-M3 权威指南》这份资料里有很详细的介绍。
示例在公司电话没法提供,只能大致说一下我的使用。我用MPU主要是用来保护某些特定的区域,我负责设备的固件开发,然后封装成lib库交给应用开发人员,为了防止他们有意或无意修改系统的设置,我通过MPU的设置,只开放了FLASH地址空间和SRAM地址空间给用户级下的代码访问,剩余的部分包括片上外设全部只能在特权级下访问,尤其是M4内核所占的地址空间。
你说的特权级和用户级不是由MPU来决定的,详细说明在那本权威指南里有,我下载的那份是在第三章。特权级就相当于windows下的超级管理员、linux下的root帐户一下,拥有访问系统一切资源的权限。而用户级相当于普通用户,很多重要的、敏感的资源是不能被访问的。MPU的作用不是来划分特权级代码和用户级代码,它只是规定在特权级下运行的代码能访问的地址空间和用户级下能访问的地址空间,(当然还有一些缓存之类的配置)。
MPU允许你把4GB的地址空间最多划分成8个大region,你可以分别赋予这些region不同的属性,这些属性分为特权级的权限和用户级的权限,下图截取于《Cortex-M3 权威指南》


指南里也有示例代码可以参考。
特权级和用户级的设置是在内核的CONTROL寄存器的最低位。
下面截图有简要说明


还有不清楚的地方可以追问,我的用户名是我的QQ,加好友请备注来源。本论坛我不是很经常来。

这个我也看过了,,就是会发现一个bug   CONTROL[0]  置位的时候  进入USER模式,,pendsvc这个功能不能使用  svc就可以使用,,所以就怀疑是不是很进入用户模式的时候问题了

这个我也看过了,代码也是参照写的,就是会发现一个bug   CONTROL[0]  置位的时候  进入USER模式,,pendsvc这个功能不能使用  svc就可以使用,,所以就怀疑是不是很进入用户模式的时候问题了

在用户级下能用SVC指令,不能用pendSVC。因为这两个异常的设计是为像操作系统这样的系统级别的程序用,SVC异常是系统开放给用户的一个进入内核的入口,而pendsvc异常一般被配置最低优先级,用来负责多任务切换等工作,从这个角度看,是不允许用户程序去触发pendSVC异常的。


下图或许会你有帮助


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top