哈喽,大家好,我是程序员秘书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官方文档定义,异常分类严格遵循指令执行与外部事件的因果关系。
下期见~