首页 > 其他 > 详细

OS支持特性

时间:2020-11-23 20:09:59      阅读:36      评论:0      收藏:0      [点我收藏+]

一.简介

处理器架构实现了多个特性,保证OS设计的方便和高效,例如:

  • 影子栈指针。有两个栈指针可用,MSP用于OS内核以及中断处理,PSP则应用于应用任务
  • SysTick定时器。位于处理器内部的简单定时器,使得同一个嵌入式OS可用在多种Cortex-M微控制器上。
  • SVC和PendSV异常。这两种异常对于嵌入式OS的操作非常重要,如上下文切换的实现等。
  • 非特权执行等级。可以利用其实现一种基本安全模型,限制某些应用任务的访问权限。特权和非特权等级的分离还可以同存储器保护单元(MPU)一起使用。
  • 排他访问。排他加载和存储指令用于OS中的信号量和互斥体(MUTEX)操作。

 

二.影子栈指针

Cortex-M处理器有两个栈指针:

  • 主栈指针(MSP)为默认的栈指针。当CONTROL的bit[1](SPSEL)为0时用于线程模式,在处理器中则总是使用。
  • 进程栈指针(PSP),当CONTROL的bit[1](SPSEL)为1时用于线程模式。

对于具有嵌入式OS或RTOS的系统,每个应用任务都有自己的栈空间,如图所示,OS的上下文切换代码在每次上下文切换时都会更新PSP。

技术分享图片

 

一般来说 ,要使用进程栈,需要将OS置于处理模式,直接编程PSP后利用异常返回流程“跳转”到应用任务。

例如,当OS从线程模式启动时,可以利用SVC异常进入处理模式,如图,然后可以创建进程栈中的栈帧,且触发使用PSP的异常返回。当加载栈帧时,应用任务就会启动。

技术分享图片

 

 在OS设计中,需要在不同任务间切换,这一般被称作上下文切换,其通常在PendSV异常处理中执行,该异常可由SysTick异常触发。

上下文切换操作中需要

  • 将寄存器(R4~R11)的当前状态保存到当前栈中
  • 保存当前PSP数值
  • 将PSP设置为下一个任务的上一次SP的数值
  • 恢复下一任务的上一次寄存器的数值
  • 利用异常返回切换任务

如下图所示:

技术分享图片

 

 需要注意的是,上下文切换在PendSV中执行,其异常优先级一般会被设置为最低。这样会避免在中断处理过程中产生上下文切换!

 

OS支持特性

原文:https://www.cnblogs.com/Random-Boy/p/14026329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!