赞
踩
在ARM指令中,有一条指令:
SVC #VAL
它会触发一个异常。
在操作系统中,比如各类RTOS或者Linux,都会使用SVC
指令故意触发异常,从而导致内核的异常处理函数被调用,进而去使用内核的服务。
比如Linux中,各类文件操作的函数open
、read
、write
,它的实质都是SVC
指令。
我们此次不讲解SVC
在内核中的使用,我们只是看看如何处理SVC
触发的异常。
在代码中插入:
SVC #1
看看会发生什么事情。
我们只简单的打印一些信息即可
void SVC_Handler(void)
{
puts("SVC_Handler\n\r");
通过在Keil中调试,查看sp的值如下:
打开反汇编文件,0x0800006e
对应的是SVC指令的下一条指令
由此可见,SVC指令异常并不像未定义指令异常一样,在恢复现场时,返回地址指向的是SVC的下一条指令,所以不会出现程序跑飞情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。