嵌入式面试题真题(高通)-ARMv8的异常等级切换

ERET指令用于异常返回,返回地址和处理器状态是从当前EL(exception level)下的ELR和SPSR寄存器中恢复的。即ELR寄存器中的值就是BL1最后跳转的目的地址,SPSR寄存器的值就是跳转之后处理器的状态。所以在代码中重点关注这两个值的初始化。

(1)处理异常的流程

ARMv8的四个异常级别只能通过异常获取/返回的方式在异常等级之间跳转。

  • 将PSTATE寄存器内容保存到对应等级的SPSR_ELx中(保存PSTATE现场)
  • 保存返回地址到对应等级的ELR_ELx寄存器中(保存返回地址)
  • 将PSTATE中的DAIF设1,即关闭调试异常、SError、IRQ和FIQ
  • 设置对应异常等级下的栈指针,自动切换SP到SP_ELx
  • 切换到对应目标异常等级,跳转到异常向量表执行

以上都是处理器自动完成的,OS所需要做的事就是从中断向量表开始,根据发生的异常类型,跳转到合适的异常向量。当异常处理完后,执行eret指令

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式学习专栏 文章被收录于专栏

7年嵌入式软、硬件开发经验,分享嵌入式软件开发相关资料,简历、工作、技术支持!!!

全部评论

相关推荐

1.自我介绍2.freerots主要是微内核,主要有哪些组成部分,内部任务间的通信方式有哪些?3.freertos任务切换的过程,详细一点如何切换的,保存怎么恢复的?4.freertos任务有哪些不同的状态?高优先级任务被阻塞或者挂起,再执行低优先级任务5.用过单片机的哪些外设?6.PWM除了占空比之外还有什么要素?频率,周期,占空比7.蓝牙的底层协议?8.linux的进程间通信机制?9.进程间的调度方式?10.linux的内存管理?11.了解Linux的一些驱动么?12.对VFS的框架有了解么?13.常用的linux基础命令14.GCC编译一般分为那几部分?15.用过vim么,介绍vim常用命令?16.结构体和联合体的区别,什么时候会用联合体?17.位域的概念?18.static关键词的作用?(二面)1.在Linux上有做过一些开发或者测试么?2.IIC驱动?3.接触过哪些单片机的外设?SPI了解过么?4.多进程的通信方式?5.问了深度学习的项目,项目难点,优化方法?6.如何看待嵌入式测试开发这个岗位?7.用过pytest库么?8.给一个测试场景,比如现在有一个IIC的驱动,怎么去测试它?(三面)三面是总监面,面试之前百度了下,还真查到了哈哈哈,算是提前认识了技术问题不多,更多的是综合性的东西1.介绍项目,项目中遇到的问题以及优化的地方?2.PWM遇到毛刺信号如何处理?这块没答好,说了电容滤波3.实习对于自己的一个收获讲一讲?4.实习中自己最有收获的一件事情?5.自己未来的职业规划?(这块我提到了自己想要往技术深层发展,面试官耐心的解释了每一阶段的工程师应该具备哪些素质,对自己也是一个很好的启发)9.18三面结束,目前业务面所有流程走完,官网状态还没变有需要的可以看看大佬专栏 问的问题专栏里都有  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
查看31道真题和解析
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务