异常处理流程

1.什么是异常源?

引发处理器进入对应的异常模式

2.异常源和异常模式的对应关系

1.五种异常模式,七种异常源 ;

2.根据不同的异常源,引发处理器进入不同的异常模式,执行异常处理函数

3.异常源具有优先级,复位的优先级最高

3.异常处理流程

保存现场:

恢复现场:

4.为什么引入异常向量表

5.swi软中断指令

例子:

复制代码
.text
.global _start
_start:
    @1.构建异常向量表
    b reset
    b undef_interrupt
    b software_interrupt
    b prefetch_dataabort
    b data_abort
    b .
    b irq
    b fiq

reset:
    @2.系统一上电,程序运行在SVC模式
        @1> 初始化SVC模式下,栈指针
    ldr sp,=0x40000800
    @3.从SVC模式切换到user模式
    msr cpsr,#0xD0
    @4.user模式下代码
        @1> 初始化user模式下,栈指针
    ldr sp,=0x40000700
    mov r0,#0x1
    mov r1,#0x2
    @4.执行软中断指令 ===> 保存现场(四大步三小步)
    swi 2
    add r0,r0,r1 @ r0 = 0x3
    b stop
    
    
undef_interrupt:
software_interrupt:
    @压栈保存现场    
    stmfd sp!,{r0-r12,lr}
    mov r0,#0x3
    mov r1,#0x4
    add r0,r0,r1 @ r0 = 0x7
    @出栈恢复现场    
    ldmfd sp!,{r0-r12,pc}^
    @^:将SPSR_<MODE>寄存器中的值,给到CPSR寄存器中
    
prefetch_dataabort:
data_abort:
irq:
fiq:
    
stop:
    b stop    
.end
相关推荐
爱好曙光20 小时前
生产延迟尖刺排查:用 bpftrace 抓系统调用与调度延迟
linux·ebpf·延迟·性能排查·bpftrace
Ruiery21 小时前
Linux 6.6内核并发与同步(一):原子操作与内存屏障 — 内核同步的硬件底座
linux·运维·服务器·1024程序员节
码完就睡21 小时前
Linux——IP协议与路由选择
linux·网络·tcp/ip·1024程序员节
H.莓飛21 小时前
【数据结构】排序_OJ题(二):划分与选择
linux·服务器·c语言·开发语言·数据结构·visual studio
艸肅21 小时前
Docker 国内镜像源配置
linux·ubuntu·docker·1024程序员节
猿粪已尽21 小时前
mac 中 iTerm2 使用 rz、sz 上传下载文件详解,附 scp 操作指南
linux·macos·scp·lrzsz
宁波阿成21 小时前
CentOS 7.5 升级 PHP 至 8.3.36 完整实操记录
linux·centos·php
djjjx.21 小时前
Linux进程篇(七):环境变量的底层溯源、核心获取机制与安全应用
linux·运维·服务器
FriendshipT21 小时前
Vim 完整指南:从入门到高效编辑
linux·人工智能·编辑器·vim·1024程序员节
Zevalin爱灰灰21 小时前
Linux入门第一部分(Ubuntu入门篇) 第二章 浅尝Ubuntu(一)
linux·嵌入式·1024程序员节