tnblog
首页
视频
资源
登录

ARM 异常处理

2236人阅读 2024/6/30 17:17 总访问:3455252 评论:0 收藏:0 手机
分类: 嵌入式

ARM 异常处理

ARM 异常处理


ARM异常处理是ARM处理器处理特殊事件的机制,这些事件可能来自硬件或软件。

ARM异常类型的优先级


复位(Reset)最高优先级,可以中断任何其他异常。
数据中止(Data Abort)当访问内存时发生错误。
快速中断请求(FIQ - Fast Interrupt Request)用于需要快速响应的高优先级外部中断。
普通中断请求(IRQ - Interrupt Request)用于常规的外部中断。
预取指令中止(Prefetch Abort)当尝试从内存取指令时发生错误。
软件中断(SWI - Software Interrupt)由软件主动触发,通常用于系统调用。
未定义指令(Undefined Instruction)当遇到处理器无法识别的指令时触发。

异常向量表


简单来讲就是:统一管理所有异常情况。
当处理器遇到”异常”时,它会查看这个表。


举例:
假设你的手机死机了(未定义指令异常):
处理器查看表中的”异常”联系方式。
然后按这个地址找到对应的处理程序。

简单软中断


我们写一个简单的软中断程序,通过swi进行触发,然后使用sirq_handler方法进行处理,最后返回并继续往下执行。

  1. .text
  2. b main @0x00 reset
  3. nop @0x04 undef
  4. b sirq_handler @0x08 soft irq
  5. nop @0x0c prefecth abort
  6. nop @0x10 data abort
  7. nop @0x14 reserved
  8. nop @0x18 irq
  9. nop @0x1C fiq
  10. sirq_handler:
  11. stmfd sp!,{r0-r12,lr}
  12. add r2,#1
  13. sirq_handler_end:
  14. ldmfd sp!,{r0-r12,pc}
  15. main:
  16. ldr sp,=stack_buf
  17. mov r1,#1
  18. mov r2,#2
  19. swi 0x1
  20. cmp r2,#2
  21. moveq r4,#4
  22. movne r4,#6
  23. .data
  24. stack_buf:
  25. .space 15*4
  26. .end


当我们执行完swi命令后,将会触发软中断,会在前面异常向量表找到sirq_handler进行执行。
此时LR会记录swi的下一条指令的地址。
但是我们要对数据操作时需要缓存一下历史数据所以我们通过stmfd进行存储,并在异常处理完成后,通过ldmfd进行返回值。
然后继续执行下面相关指令。

这里值得注意的是我定义了一块存储空间,并且要将ldr的sp指向存储空间的地址,原因是如果不进行指定就会报错。
通过ldmfd从堆栈拿数据回来的时候会导致没权限,然后报错。

多个软中断


在有多个软中断的情况下,我们可以通过获取lr的地址,减4位获取到swi的地址,并且通过ldr获取到它的值,但是需要使用bic去掉高8位指令段,剩下的就是值,然后通过实际的值我们就可以实现不同的软中断不同的处理。

  1. .text
  2. b main @0x00 reset
  3. nop @0x04 undef
  4. b sirq_handler @0x08 soft irq
  5. nop @0x0c prefecth abort
  6. nop @0x10 data abort
  7. nop @0x14 reserved
  8. nop @0x18 irq
  9. nop @0x1C fiq
  10. sirq_handler:
  11. stmfd sp!,{r0-r12,lr}
  12. ldr r0,[lr,#-4]
  13. bic r0,#0xff000000
  14. cmp r0,#1
  15. addeq r2,#1
  16. cmp r0,#2
  17. subeq r2,#1
  18. sirq_handler_end:
  19. ldmfd sp!,{r0-r12,pc}
  20. main:
  21. ldr sp,=stack_buf
  22. mov r1,#1
  23. mov r2,#2
  24. swi 0x1
  25. cmp r2,#2
  26. moveq r4,#4
  27. movne r4,#6
  28. swi 0x2
  29. mov r0,#3
  30. .data
  31. stack_buf:
  32. .space 15*4
  33. .end


当执行到第一个软中断swi 0x1时。


执行到第二个软中断swi 0x2时。

B指令做跳转异常的缺陷


一是只能在32M范围的数据进行跳转,二是方法在其他地方将无法完成跳转。
所以我们这里可以做一点修改,将替换为ldr pc, _sirq_handler里面通过一个字符串来进行存储地址,并进行执行跳转。
这样既可以突破32M的范围限制,当方法在其他文件中同样可以进行跳转。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Kubernetes AppARMor 简单运用

Kubernetes AppArmor 简单运用[TOC] AppArmor 简介AppArmor 是一个有效且易于使用的 Linux 应用程序安全系统。AppArmor 通...

docker swARM 与 k8s 区别 几种集群方案的对比

下面以docker部署为主,主流的容器化集群部署方案主要有以下几种: Docker Compose:帮助在 同一个节点 上部署多个容器。D...

.net6使用nacos 集群部署,负载均衡调用 。docker swARM 集群部署.net6项目

我们这里的k8s测试环境暂时用不了了,这里先使用docker swarm来进行一下集群部署。.net6使用nacos实现服务注册与服务发现:h...

ARM 工作模式及寄存器

ARM 工作模式及寄存器[TOC] 简单的计算机工作原理 CPUCPU是计算机的核心部分,用于执行程序指令。它包含以下几个主要组件...

ARM 常用的指令

ARM 常用的指令[TOC] 搬移指令mov、msr和mrs指令就不讲了,上一篇写得有。and指令将第二个参数和第三个参数进行与运算。我...

ARM LoadStore架构

ARM LoadStore架构[TOC] LoadStore架构 存储器之间不能直接拷贝,必须通过寄存器做中转:在 ARM 架构中,数据传输只能通...

GNU ARM 汇编伪指令

GNU ARM 汇编伪指令[TOC] GNU ARM 汇编伪指令 汇编指令 描述 .section 定义内存段 .text 将定义符...

ARM8 64位汇编简介

ARM8 64位汇编简介[TOC] 版本差异 特性 ARM7 ARM8 内存 仅支持 32 位地址空间 支持 64 位和 32 位地址...

ARM8 汇编指令

ARM8 汇编指令[TOC] ARM8 汇编指令参考关于ARM8汇编指令可以参考线上链接:https://developer.arm.com/documentation/ddi0...

ARM8 异常处理

ARM8 异常处理[TOC] ARM8 异常向量表 ARMv8 异常向量表分类4大类(Execution Levels)EL3(Exception Level 3): 安全监...

.net Lib.HARMony框架学习笔记

.net Lib.Harmony框架学习笔记[TOC] Lib.Harmony框架介绍Lib.Harmony 是一个用于 .NET 应用程序的库,主要用于运行时的代...

ARM8 U-boot启动源码分析(学习笔记)

ARM8 U-boot启动源码分析(学习笔记)[TOC] 什么是U-Boot?U-Boot是嵌入式系统中首先执行的程序之一。也是开源引导程序。...

Io流 mvc异常处理

//获取错误信息string errorMsg = filterContext.Exception.Message; //错误页面string url = filterContext.HttpContext.R...

MVC全局异常处理(错误日记)

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...

MVC全局异常处理(错误日记)

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术