完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好,小弟想问下有谁用过M4内核的mpu功能,是否有示例可以分享下,
或者MPU中的特权级代码和用户级代码是怎么区别,通过什么指令可以实现两者的跳转? 权威指南和用户手册都看了,貌似没找到, 谢谢 |
|
相关推荐
4个回答
|
|
刚好做项目用过,用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就可以使用,,所以就怀疑是不是很进入用户模式的时候问题了
|
|
|
|
1522495332 发表于 2015-9-17 22:22 这个我也看过了,代码也是参照写的,就是会发现一个bug CONTROL[0] 置位的时候 进入USER模式,,pendsvc这个功能不能使用 svc就可以使用,,所以就怀疑是不是很进入用户模式的时候问题了 |
|
|
|
在用户级下能用SVC指令,不能用pendSVC。因为这两个异常的设计是为像操作系统这样的系统级别的程序用,SVC异常是系统开放给用户的一个进入内核的入口,而pendsvc异常一般被配置最低优先级,用来负责多任务切换等工作,从这个角度看,是不允许用户程序去触发pendSVC异常的。 下图或许会你有帮助 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1330 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1263 浏览 3 评论
2430 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1416 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1847 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 07:06 , Processed in 0.688243 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号