tnblog
首页
视频
资源
登录

ARM8 异常处理

1371人阅读 2024/7/11 21:46 总访问:3467443 评论:0 收藏:0 手机
分类: 嵌入式

ARM8 异常处理

ARM8 异常向量表


ARMv8 异常向量表分类
4大类(Execution Levels)
EL3(Exception Level 3): 安全监控模式,通常用于安全监控代码。
EL2(Exception Level 2): Hypervisor模式,用于虚拟化管理。
EL1(Exception Level 1): 内核模式,操作系统内核运行在该模式。
EL0(Exception Level 0): 用户模式,应用程序运行在该模式。


每类下的4种具体情况
对于每个执行级别,异常向量表分为以下4种具体情况:
Synchronous Exception(同步异常): 例如指令未定义、指令中止、数据中止等。
IRQ(Interrupt Request): 普通中断。
FIQ(Fast Interrupt Request): 快速中断。
SError(System Error): 系统错误。

简单代码示范

  1. adr x0,vectors // 读取异常向量表的首地址
  2. msr vbar_el1,x0 // 设置异常表的基地址
  3. svc #2 // 系统调用(触发同步异常陷入,sp_el进入不同的异常) 类似swi指令

设置异常处理简单案例

  1. .globl _start // 声明_start为全局符号,程序的入口点
  2. _start:
  3. mrs x1, SPSel // 将当前SP选择状态加载到x1
  4. mrs x2, CurrentEL // 将当前异常级别加载到x2
  5. mov x0, #0 // 将0加载到x0
  6. //msr SPSel, x0 // 可选:将x0的值写入SPSel寄存器
  7. mov x0, #0x5 // 将0x5加载到x0
  8. adr x0, vectors // 获取vectors标签的地址并加载到x0
  9. msr vbar_el1, x0 // 设置向量基址寄存器vbar_el1x0的值
  10. svc #0x02 // 触发系统调用
  11. reset_end:
  12. b reset_end // 进入无限循环,保持在reset_end标签
  13. do_bad_sync:
  14. mov x2, #1 // 将1加载到x2,表示同步异常
  15. b reset_end // 跳转到reset_end,进入无限循环
  16. do_bad_irq:
  17. mov x2, #2 // 将2加载到x2,表示IRQ异常
  18. b reset_end // 跳转到reset_end,进入无限循环
  19. .align 11 // 2^11 = 2048字节对齐,整个异常向量表2K对齐
  20. // 16个异常,每个异常32条指令,16*32*4=2048
  21. // 16个异常,这里使用前8
  22. vectors:
  23. // ===============sp0===============
  24. // ---同步异常
  25. .align 7 // 2^7 = 128字节对齐
  26. mov x0, #1 // 将1加载到x0
  27. b do_bad_sync // 跳转到do_bad_sync处理例程
  28. // ---irq异常
  29. .align 7 // 2^7 = 128字节对齐
  30. mov x0, #1 // 将1加载到x0
  31. b do_bad_irq // 跳转到do_bad_irq处理例程
  32. // ---fiq异常
  33. .align 7 // 2^7 = 128字节对齐
  34. mov x0, #1 // 将1加载到x0
  35. b reset_end // 跳转到reset_end,进入无限循环
  36. // ---SError异常
  37. .align 7 // 2^7 = 128字节对齐
  38. mov x0, #1 // 将1加载到x0
  39. b reset_end // 跳转到reset_end,进入无限循环
  40. // ===============sp_elx===============
  41. // ---同步异常
  42. .align 7 // 2^7 = 128字节对齐
  43. mov x0, #1 // 将1加载到x0
  44. b do_bad_sync // 跳转到do_bad_sync处理例程
  45. // ---irq异常
  46. .align 7 // 2^7 = 128字节对齐
  47. mov x0, #1 // 将1加载到x0
  48. b do_bad_irq // 跳转到do_bad_irq处理例程
  49. // ---fiq异常
  50. .align 7 // 2^7 = 128字节对齐
  51. mov x0, #1 // 将1加载到x0
  52. b reset_end // 跳转到reset_end,进入无限循环
  53. // ---SError异常
  54. .align 7 // 2^7 = 128字节对齐
  55. mov x0, #1 // 将1加载到x0
  56. b reset_end // 跳转到reset_end,进入无限循环


取消msr SPSel, x0的注释,修改SPSel的值来设置偏移向的地址。


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

评价

ARM8 64位汇编简介

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

ARM8 汇编指令

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

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...

重写基类的异常处理方法

1.publicoverridevoidOnException(HttpActionExecutedContextactionExecutedContext) { //异常日志记录 LogHelper.Write...

异常处理中间件:区分真异常与逻辑异常

异常处理中间件:区分真异常与逻辑异常[TOC] 处理异常的方式 异常处理页异常处理匿名委托方法IExceptionFilterExceptio...

python异常处理

python异常处理主要的关键字于用法: 最基本的用法:try: i = 10/0 except : print("发生异常了") el...

nginx发布vue,nginx异常处理404处理结合nginx优化路由404。vue项目发布在服务器中

nginx发布vue这里用vue3-admin-template来举例,其实都是一样的。 先打包 使用的打包命令类似npm run build:prod,反正根...

异常处理-异常处理器 01

一、案例、结构环境1、pom.xml<!--servlet规范--> <dependency> <groupId>javax.servlet</groupId&...

异常处理-注解开发异常处理器 02

一、1、2、两种异常处理方式对比注解处理器可以拦截到入参类型转换异常非注解处理器无法拦截到入参类型转换异常案例、续写...

异常处理-异常处理解决方 03

一、二、案例续写于异常处理-注解开发异常处理器 021、创建业务报错时需要的类2、创建系统报错时需要的类3、项目报错时通知...

ARM 异常处理

ARM 异常处理[TOC] ARM 异常处理ARM异常处理是ARM处理器处理特殊事件的机制,这些事件可能来自硬件或软件。ARM异常类型的...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
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
欢迎加群交流技术