当前位置:   article > 正文

ARM架构与编程——异常与中断实战:SVC异常_arm svc

arm svc

实战_SVC异常

1.1 什么是SVC指令?

ARM指令中,有一条指令:

SVC #VAL
  • 1

它会触发一个异常。
在操作系统中,比如各类RTOS或者Linux,都会使用SVC指令故意触发异常,从而导致内核的异常处理函数被调用,进而去使用内核的服务。
比如Linux中,各类文件操作的函数openreadwrite,它的实质都是SVC指令。
我们此次不讲解SVC在内核中的使用,我们只是看看如何处理SVC触发的异常。

1.2 在汇编代码里插入SVC指令

在代码中插入:

SVC #1
  • 1

看看会发生什么事情。

1.2.1 提供SVC异常处理函数

我们只简单的打印一些信息即可

void SVC_Handler(void)
{
    puts("SVC_Handler\n\r");
    
  • 1
  • 2
  • 3
  • 4

1.2.2 查看保存的现场

通过在Keil中调试,查看sp的值如下:
在这里插入图片描述
打开反汇编文件,0x0800006e 对应的是SVC指令的下一条指令在这里插入图片描述
由此可见,SVC指令异常并不像未定义指令异常一样,在恢复现场时,返回地址指向的是SVC的下一条指令,所以不会出现程序跑飞情况
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/677241
推荐阅读
相关标签
  

闽ICP备14008679号