擦鞋匠 发表于 2023-4-13 17:16:54

cortex-m3/m4,特权处理模式和非特权处理模式有哪些区别呢?



针对freertos工程
1、os还没运行时:nPRIV=0 SPSEL=0 即处理器处于特权线程模式,线程模式使用MSP
2、os开始运行时:nPRIV=0 SPSEL=1 即处理器处于特权线程模式,线程模式使用PSP
备注:异常处理处于特权处理模式,始终使用MSP

问题1:
特权处理模式和非特权处理模式有哪些区别呢?
问题2:
os开始运行时使用nPRIV=1 SPSEL=1存在哪些问题?

tang_qianfeng 发表于 2023-4-13 17:26:46

非特权模式还有一些寄存器无法读写

mPiDDR 发表于 2023-4-13 17:32:26

个人知识比较浅,试着回答一下,不对请斧正
M3M4M0+ 这种级别的处理器,只是堆栈指针的区别。
所谓的特权模式,就是中断,使用的是MSP,其他的任务栈在执行时使用PSP指针
当然,像freeos 这样,在任务切换时,其实是触发了PendSV中断,在中断里执行内核相关的操作。双堆指针保证了内核的堆栈不被污染[个人觉得这样也不安全]。

更高级的处理器,像A系列,M7,有内存管理单元,任务空间和系统空间可以划分,应用程序只可以访问自己空间里的内存

security 发表于 2023-4-14 09:14:12

本帖最后由 security 于 2023-4-14 09:15 编辑

1、主要的区别就是特权拥有全部的访问权限,非特权是受限的,访问权限可以通过 MPU 设置存储器的访问权限。
另外可能有一些寄存器,本身就要求一定要特权模式才能访问。

2、OS 开始运行时,使用非特权模式的话,那么访问受限制的资源,就要从非特权模式切换到特权模式,这需要借助特殊的机制,需要额外的开销,
对于简单的 RTOS 应用而言,还不如直接在特权模式来得省事。

擦鞋匠 发表于 2023-4-14 09:21:17

security 发表于 2023-4-14 09:14
1、主要的区别就是特权拥有全部的访问权限,非特权是受限的,访问权限可以通过 MPU 设置存储器的访问权限。 ...
(引用自4楼)

感谢阁下不吝赐教!
页: [1]
查看完整版本: cortex-m3/m4,特权处理模式和非特权处理模式有哪些区别呢?