cortex M3/4 特权模式和用户模式

一、为什么需要区分用户级和特权级

用户级和特权级的实现是为了给存储器提供一种保护机制,让用户代码不能访问特定的存储区域。
只有特权级级代码才能有权限访问特定的存储区域。防止用户代码或者应用代码意外或恶意访问操作系统的数据存储区域。一般情况下特权级模式会配合MPU一起使用,通过MPU设定只有特权级才能访问的存储空间

二、模式详细介绍

以Cortex-M4为例,支持 2 个模式和两个权限等级。

两种运行模式:hander模式线程模式

操作权限:特权级用户级

特权级别用户级别
异常模式特权级handler模式不存在
线程模式特权级线程模式用户级线程模式

Handler模式通过异常/中断进入,退出即返回线程模式

handler模式总是特权级的,在复位后,处理器进入线程模式+特权级

当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;

NVIC的中断控制/状态寄存器都只能在特权级下访问。不过有一个例外——软件触发中断寄存器可以在用户级下访问以产生软件中断(利用这个特性实现用户模式到特权模式转变)。

三、模式切换

CONTROL 寄存器在特权可写,在非特权状态下只读

库写接口:void __set_CONTROL(uint32_t control)

库读接口:   uint32_t __get_CONTROL(void)      

  1. Control寄存器:选择栈指针,线程模式的访问等级,是否使用浮点单元。该寄存器可以用来区分特权模式和非特权模式。回复最初的问题了。

位域功能
nPRIV定义线程模式下的特权级别:0:特权模式;1:非特权模式
SPSEL定义当前使用的哪个栈指针;0:MSP为当前栈指针;1:PSP为当前栈指针。
FPCA指示当前是否为浮点指针执行,0:非浮点单元运行。1:浮点单元运行。

1、特权级变更为用户级的方式

在特权级下的代码可以通过置位 CONTROL[0]来进入用户级。用户级下的代码不能再试图修改 CONTROL[0]来回到特权级

2、用户级变更为特权级的方式

①不管是任何原因产生了任何异常/中断,处理器都将以handler特权级来运行其服务函数,异常返回后将回到产生异常之前的级别。

②用户级下的代码必须通过一个异常 handler,在异常 handler服务函数中修改 CONTROL[0],才能在返回到线程模式后拿到特权级。

如下图所示,不同级别和操作模式下的转换,寄存器操作可以查询《Cortex-M4的相关寄存器组》。
 

3、代码示例

void Reg_swtichToPriv(void)
{
	__ASM
	{
		SVC 1;
	}
}

void Reg_swtichToUser(void)
{
	__ASM
	{
		mrs r0,control;
		orrs r0,r0,#1;
		msr control,r0;
        //__set_CONTROL(1);
	}
}

void SVC_Handler(void)
{
	__ASM
	{
		mrs r0,control;
		bics r0,r0,#1;
		msr control,r0;
        //__set_CONTROL(0);
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cortex-M3和Cortex-M4是ARM架构的微控制器。它们广泛应用于嵌入式系统和物联网设备中,具有高性能、低功耗和强大的性能优化能力。 Cortex-M3和Cortex-M4使用的指令集是ARMv7-M架构,其中包含了大量的指令,用于实现各种功能和操作。下面是这两种微控制器常用的指令集: 1. 数据处理指令:这些指令用于对数据进行处理和操作,比如加法、减法、移位等。Cortex-M3和Cortex-M4支持32位整数和浮点数的处理指令,可以高效地执行各种数学运算。 2. 控制指令:这些指令用于控制程序的流程,比如条件判断、跳转和函数调用等。Cortex-M3和Cortex-M4支持分支指令、循环指令和中断指令,可以实现灵活的控制流程和异常处理能力。 3. 存储器访问指令:这些指令用于对存储器进行读写操作,包括读取数据、存储数据和移动数据等。Cortex-M3和Cortex-M4支持多种不同的存储器访问指令,包括字节访问、半字访问和字访问等,可以高效地操作各种类型的存储器。 4. 特殊功能寄存器指令:这些指令用于对特殊功能寄存器进行读写操作,包括配置系统控制寄存器、中断寄存器和电源管理寄存器等。Cortex-M3和Cortex-M4提供了一套完整的特殊功能寄存器指令集,方便对系统进行配置和管理。 总结来说,Cortex-M3和Cortex-M4常用的指令集主要包括数据处理指令、控制指令、存储器访问指令和特殊功能寄存器指令。这些指令可以满足微控制器在嵌入式系统和物联网设备中的各种需求,实现高效、低功耗的数据处理和控制功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值