• 正文
    • 前言
    • 正文
    • ARM64(ARMv8)异常分类
    • 关键差异说明
    • 总结
  • 相关推荐
申请入驻 产业图谱

arm32和arm64异常分类梳理 | 同步异常、异步异常经常搞得我晕头转向,现在终于搞清楚了

04/08 16:10
428
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

哈喽,大家好,我是程序员秘书LittleG。

上篇:常见文件系统(ext4、squashfs、ubifs、jffs2、tmpfs、fat32/vfat、f2fs)特性汇总对比

前言

上学的时候玩过arm 32的板子,工作后一直接处的都是arm64架构的产品,但最近公司有一款32的产品要搞,不得不再倒回去学习学习了。

正文

ARM32(ARMv7)异常分类

1. 同步异常(Synchronous Exceptions)

• 定义:由当前执行指令直接触发,异常处理返回地址精确指向触发指令;

• 类型:

• 复位(RESET):硬件初始化时触发;

• 未定义指令(Undefined Instruction):执行非法指令时触发;

软件中断(SWI):通过SWI指令主动触发系统调用;

• 预取指令异常(Prefetch Abort):指令预取阶段内存访问失败;

• 数据访问异常(Data Abort):数据加载/存储阶段内存访问失败;

2. 异步异常(Asynchronous Exceptions)

• 定义:由外部事件触发,与当前指令无关,返回地址不精确指向触发源;

• 类型:

• IRQ(普通中断):外设请求处理;

• FIQ(快速中断):高优先级外设请求;

------

ARM64(ARMv8)异常分类

1. 同步异常(Synchronous Exceptions)

• 定义:指令执行直接导致,返回地址精确指向触发指令,异常处理需立即响应;

• 类型:

• 系统调用(SVC/HVC/SMC):特权级别切换指令触发;

• 内存访问异常:缺页、权限错误等MMU相关错误;

• 未定义指令/对齐错误:执行非法指令或未对齐内存访问;

• 调试异常:断点、观察点触发;

2. 异步异常(Asynchronous Exceptions)

• 定义:由外部硬件信号触发,与当前指令无关,处理可延迟;

• 类型:

• IRQ(普通中断):外设请求,如定时器、网络包到达;

• FIQ(快速中断):高优先级外设请求;

• SError(系统错误):总线错误、硬件故障等不可恢复错误;

------

关键差异说明

1. ARM32

• 同步异常涵盖内存访问错误(Prefetch/Data Abort),因其由指令执行直接导致,需立即处理。

• 异步异常仅限中断(IRQ/FIQ),无SError概念。

2. ARM64

• 同步异常更广泛:包括系统调用、内存错误等需精确响应的场景。

• 新增SError类别:归类为异步异常,用于硬件错误处理。

• 异常级别(EL0-EL3):同步异常可在EL0触发(如用户态系统调用),异步异常仅由EL1及以上处理。

------

总结

• 同步/异步定义:通过指令相关性、返回地址精度区分。

• ARM64新增SError:归类为异步异常,用于硬件错误。

• 内存访问异常归属:Prefetch/Data Abort由指令触发,属于同步异常。

按照ARM官方文档定义,异常分类严格遵循指令执行与外部事件的因果关系。

下期见~

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录