ARM异常处理(4):SVC和PendSV的作用详解
创始人
2024-03-20 08:53:43

SVC(Supervisor Call)和PendSV(Pendable Service Call)是针对软件和操作系统的两个异常。

1 SVC

SVC用于生成系统函数调用,例如,用户程序不允许直接访问硬件,操作系统可以通过SVC提供对硬件的访问。因此,当用户程序想要使用某些硬件时,可以使用SVC指令,然后执行操作系统中的软件异常处理程序,并提供用户应用程序请求的服务。通过这种方式,对硬件的访问由操作系统控制,操作系统可以阻止用户应用程序直接访问硬件,从而提供更可靠的系统。

SVC还可以使软件更具可移植性,因为用户程序不需要知道硬件的编程细节。用户程序只需要知道应用程序编程接口(API)函数ID和参数,而实际的硬件级编程是由设备驱动程序处理的。
在这里插入图片描述
SVC异常由SVC指令产生,该指令需要一个立即数作为参数,根据这个参数执行不同的SVC处理函数。例:

SVC #0x3 ; 调用SVC函数3
SVC 0x3 ;   传统的语法(没有#)也可行

在C语言中,可以使用编译器关键字函数__svc或者使用内联汇编代码来执行SVC指令。

对于操作系统来说,当SVC处理程序被执行时,我们可以通过读取堆栈中的PC值来确定SVC指令中的立即数据值,然后从该地址读取指令并屏蔽不需要的位。如果使用的PSP堆栈,则还需要通过LR寄存器判断当前使用的是哪个堆栈。


SVC和软件中断指令(ARM7)
在ARM7中有一个软件中断指令SWI(Software interrupt instruction)。实际上,SVC指令的二进制编码与ARM7中的SWI是相同的。由于异常模型发生了变化,这条指令被重命名,以确保程序员能够正确地将软件代码从ARM7移植到Cortex-M3。


由于Cortex-M3中的中断优先级模型,我们不能在SVC处理程序中使用SVC指令(因为优先级与当前优先级相同),这样做将导致Usage fault。出于同样的原因,在NMI处理程序或Hard fault处理程序中使用SVC也是不允许的。

2 PendSV

PendSV与操作系统中的SVC协同工作。SVC不能挂起,它将立即被执行;而PendSV可以暂时挂起异常,对于操作系统来说这很有用,它可以等待一个重要的任务执行完毕后再处理该异常。

PendSV异常通过向NVIC Interrupt Control State Register中的PENDSVSET置1来产生。

PendSV的一个典型应用就是上下文切换。例如,一个系统可能有两个任务,上下文切换可以通过调用SVC函数或被Systick触发。
在这里插入图片描述
如果中断请求发生在Systick异常之前,Systick异常将抢占IRQ处理程序。在这种情况下,操作系统不应该进行上下文切换,否则IRQ处理程序进程将被延迟执行。对于Cortex-M3,如果操作系统在中断active时试图切换到线程模式,可能会产生Usage fault,如下图所示:
在这里插入图片描述
为了避免延迟处理IRQ处理的问题,一些操作系统在没有任何IRQ处理程序正在执行时才执行上下文切换。但这可能导致任务切换有很大的延迟,特别是当中断源的频率接近Systick异常的频率时。

PendSV异常通过延迟上下文切换请求直到IRQ处理程序完成来解决这个问题。为此,PendSV异常的优先级设置为最低,如果操作系统检测到一个IRQ当前处于活动状态(IRQ处理程序正在运行并且被Systick抢占),它通过挂起PendSV异常来延迟上下文切换。如下图所示:
在这里插入图片描述
(1)任务A调用SVC进行任务切换(如等待其它任务释放一个信号量)
(2)操作系统接收请求,准备上下文切换,并挂起PendSV异常。
(3)当CPU退出SVC时,它立即进入PendSV并进行上下文切换。
(4)当PendSV完成并返回到线程级别时,它执行任务B。
(5)IRQ产生并进入中断处理程序
(6)当运行中断处理程序时,发生Systick异常
(7)操作系统执行基本操作,然后挂起PendSV异常,为上下文切换做好准备
(8)当SYSTICK异常退出时,它返回到中断服务例程。
(9)当中断服务例程完成时,PendSV启动并执行实际的上下文切换操作。
(10)当PendSV完成时,程序返回到线程级别,继续执行任务A

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...