【车载开发系列】嵌入式开发之中断向量表

news2024/11/19 17:39:46

【车载开发系列】嵌入式开发之中断向量表

嵌入式中断向量表

  • 【车载开发系列】嵌入式开发之中断向量表
    • 一. 中断向量表的概念
      • 1)中断向量
      • 2)中断向量表
      • 3)中断向量表的存放
    • 二. 中断向量表的特点
    • 三. 中断向量表的作用
    • 四. 上电后第一条指令
    • 五. 芯片上电程序执行流程
    • 六. 复位中断代码
    • 七. 各个种类的中断
      • 1)复位中断(Reset)
      • 2)未定义指令中断(Undefined Instruction)
      • 3)软中断(Software Interrupt,SWI)
      • 4)指令预取中止中断(Prefetch Abort)
      • 5)数据访问中止中断(Data Abort)
      • 6)IRQ 中断(IRQ Interrupt)
      • 7)FIQ 中断(FIQ Interrupt)

一. 中断向量表的概念

1)中断向量

中断处理程序的入口地址又称中断向量。一般统一放置在中断向量表中。

2)中断向量表

中断向量表的全称叫做interrupt vector table。它包含中断服务程序地址的特定内存区域,这些服务程序是处理外部硬件中断请求的代码。
当中断或异常发生的时候,CPU自动将PC指向一个特定的地址,这个地址就是中断向量表。

3)中断向量表的存放

中断向量表存放在内存特定的位置上,它是一个4byte的数组,每个成员都是一个地址,指向相应的中断处理函数,当芯片处于不同的状态时,就会根据这段内容跳转到对应的地址去执行对应的程序。特别的第一个成员是栈顶地址,第二个成员是复位函数Reset_Handler。

二. 中断向量表的特点

这些中断服务程序(函数)在中断向量表中的位置是由ECU厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址处。
单片机启动之后一般第一件事就是读取中断向量表。它是从起始地址0x00000000开始的固定的一段内容,一共4Byte。

三. 中断向量表的作用

在 CPU 接收到外部中断请求时,它会先查询中断向量表,以查找到相应的中断服务程序地址。首先会保护现场然后,CPU 会将控制转移到该地址,以执行相应的中断服务。完成中断服务程序后,控制会恢复到中断发生前的程序流程。

四. 上电后第一条指令

首先明确一点,单片机上电开始执行的第一条指令肯定不是我们在main函数中写的第一条指令,在此之前,我们需要汇编程序完成一些初始化的工作。
在ARM架构的芯片下,不出意外,程序都是从0X00000000最开始的位置执行的,那程序从这里运行,接下来要完成什么工作呢,那就不得不提到中断向量表,说是中断向量表,不如说是从0X00000000开始的固定的一段内容。
这段内容以四个字节为单位,每个字节保存一个地址,当芯片处于不同的状态时,就会根据这段内容跳转到对应的地址去执行对应的程序
在这里插入图片描述

五. 芯片上电程序执行流程

当芯片上电以后,我们在上面表格中寻找一个跟程序上电比较接近的中断,毫无意外,我们选择复位中断,平常玩单片机的时候,大家不都是出了bug,复位一下单片机,这里的复位可以是我们去按单片机的复位按钮,也可以断电重新上电,所以重新上电约等于复位。
芯片上电了,他发现自己是重新上电而产生的复位中断,由上图可知,那么程序会在0X00开始执行,但是这个地方只保存了一个地址,那么程序跳转到0X00之后会立马跳转到这个位置保存的地址执行,程序就跳转到了另一个地方,然后在这里通过汇编代码进行堆栈设置,为C语言运行创造条件,最后再跳转到main函数执行,这才是真正到了main函数。

六. 复位中断代码

下面展示一些 内联代码片

_start:
	ldr pc, =Reset_Handler /* 复位中断 */
	ldr pc, =Undefined_Handler /* 未定义指令中断 */
	ldr pc, =SVC_Handler /* SVC(Supervisor)中断 */
	ldr pc, =PrefAbort_Handler /* 预取终止中断 */
	ldr pc, =DataAbort_Handler /* 数据终止中断 */
	ldr pc, =NotUsed_Handler /* 未使用中断 */
	ldr pc, =IRQ_Handler /* IRQ 中断 */
	ldr pc, =FIQ_Handler /* FIQ(快速中断)未定义中断 */
	# 此处省略好多
/* 复位中断 */
Reset_Handler:A21-//
	# 此处再省略好多
	b main /* 跳转到 main 函数 */


上面的b代表跳转,后面跟什么,就代表跳转到哪里
上面的_start可以暂时理解为将中断向量表进行规定,然后出现复位中断就将pc指针指向复位中断函数,pc指针表示程序运行位置,换句话说,pc指针在哪,程序就在哪开始运行。
与中断有关的应该是IRQ外部中断FIQ快速中断,因此显而易见,当中断发生时,无论当前程序在哪里运行,都会跑到这个表所指向的地址,在这个地址处,我们就可以编写自己的中断处理函数了,当然还要涉及到具体的中断号以及中断优先级的判断。

七. 各个种类的中断

1)复位中断(Reset)

CPU复位以后就会进入复位中断,我们可以在复位中断服务函数里面做一些初始化工作,比如初始化 SP 指针、 DDR 等等。

2)未定义指令中断(Undefined Instruction)

如果指令不能识别的话就会产生此中断。

3)软中断(Software Interrupt,SWI)

由 SWI 指令引起的中断, Linux的系统调用会使用SWI指令来引起软中断,通过软中断来陷入到内核空间。

4)指令预取中止中断(Prefetch Abort)

预取指令的出错的时候会产生此中断。

5)数据访问中止中断(Data Abort)

访问数据出错的时候会产生此中断。

6)IRQ 中断(IRQ Interrupt)

也叫做外部中断。芯片内部的外设中断都会引起此中断的发生。

7)FIQ 中断(FIQ Interrupt)

快速中断,如果需要快速处理中断的话就可以使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1081658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ardupilot罗盘数据计算航向

目录 文章目录 目录摘要1.数据特点2.数据结论1.结论2.结论摘要 本节主要记录ardupilot 根据罗盘数据计算航向的过程。 如果知道了一组罗盘数据,我们可以粗略估计航向:主要后面我们所说的X和Y都是表示的飞机里面的坐标系,也就是X前Y右边,如果按照罗盘坐标系Y实际在左边。 我…

USB 转串口芯片 CH340

目录 1、概述 2、特点 3、封装 4、引脚 6、参数 6.1 绝对最大值(临界或者超过绝对最大值将可能导致芯片工作不正常甚至损坏) 6.2 电气参数(测试条件:TA25℃,VCC5V,不包括连接 USB 总线的引脚&…

甘特图组件DHTMLX Gantt示例 - 如何有效管理团队工作时间?(一)

如果没有有效的时间管理工具,如工作时间日历,很难想象一个项目如何成功运转。这就是为什么我们的开发团队非常重视项目管理,并提供了多种选择来安排DHTMLX Gantt的工作时间。使用DHTMLX Gantt这个JavaScript库,您可以创建一个强大…

自定义一个简单的操控器类

目录 1. 前言 2. 操控器需求 3. 功能实现 3.1. 预备知识 3.2. 代码实现 3.3. 代码难点说明 1. 前言 osg已经自己实现了很多操控器类,这些操控器类存放在osg源码目录下的src\osgGA目录。感兴趣的童鞋,可以自己去研究源码。下面两篇博文是我研究osg的…

设备管理工具

做了一个代理类,抽象出来后在注册表中,查找已经注册的设备 python 中 dict 和 lua 中的 table 一样高效 先初始化找到的设备通信程序,底层接口准备好C,这个设备调试界面就是可以用的,剩下就是MV了 软件升级已经稳定可用了 包括软件的备份和回滚操作登录时为设备页面…

【工作流引擎】Activiti的使用03

流程定义查询 // 获取部署时的信息ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService processEngine.getRepositoryService();ProcessDefinitionQuery processDefinitionQuery repositoryService.createProcessDe…

直观全面解释Transformer模型;上海人工智能实验室推出首个图文混合创作大模型浦语灵笔

🦉 AI新闻 🚀 上海人工智能实验室推出首个图文混合创作大模型浦语灵笔 摘要:上海人工智能实验室推出了一款名为浦语灵笔的图文混合创作大模型,并宣布其开源。浦语灵笔基于书生・浦语大语言模型,具备强大的多模态性能…

LabVIEW开发卫星测试平台

LabVIEW开发卫星测试平台 已经有不少的大学和研究机构经常使用立方体卫星。它们的广泛使用通常归因于使用廉价零件、无偿学生劳动和简单的设计。科学、技术、工程和数学学生已被证明可以通过参与实际工作宇宙飞船系统的规划、开发和测试而从中受益。通过鼓励来自不同学术领域的…

Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境

【原文链接】Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境 文章目录 一、虚拟机环境准备1.1 准备三台CentOS操作系统的虚拟机1.2 修改主机名1.3 确认CentOS的版本符合要求1.4 配置地址解析1.5 配置时间同步1.6 关闭防火墙…

【jmeter的使用】【性能测试1】

jmeter的使用笔记2 线程并发的设置定时器1)同步定时器2)准确的吞吐量定时器3)常数吞吐量定时器 用户自定义变量设置响应断言聚合报告查看聚合报告参数详解: 前言:使用jmeter进行简单性能测试实践,以百度搜索…

Java中的错误和异常有什么区别和联系?

​ 概述 错误 该错误表示大多数情况是由于系统资源不足而发生的。系统崩溃和内存错误就是错误的例子。它主要发生在运行时。 错误是用户执行意外操作时产生的严重情况;错误大多发生在编译时,如语法错误,但它也可能发生在运行时&#xff1…

UE5:如何解决背景图片被拉伸的问题?

1.在图片外围包裹一个Scale Box组件 2.将图片的尺寸修改为原始尺寸就可解决问题

北美”闲鱼”Poshmark,如何销售提高成单率?附防封养号攻略

Poshmark 是一款美国的社交商务应用程序,被称为北美的”咸鱼“。该平台提供女性、男性、儿童时尚和家居装饰品。目前在美国、加拿大、澳洲、印度均可开通,其余地区暂不支持。 在平台上,用户可以自由上传和销售产品。Poshmark提供安全的支付解…

【Zookeeper专题】Zookeeper选举Leader源码解析

目录 前言阅读建议课程内容一、ZK Leader选举流程回顾二、源码流程图三、Leader选举模型图 学习总结 前言 为什么要看源码?说实在博主之前看Spring源码之前没想过这个问题。因为我在看之前就曾听闻大佬们说过【JavaCoder三板斧:Java,Mysql&a…

设计模式_责任链

责任链模式 介绍 设计模式定义案例责任链模式问题 传给 多个可处理人 这多个处理人做成一个链表学生请假条审核 上课老师(3天权限) 班主任 (5天权限) 校长 (30天权限) 问题堆积在哪里解决办法进一步优…

目标检测新思路:DETR

Transformer是一种基于自注意力机制的神经网络架构,它能够从序列中提取重要信息,已被广泛应用于自然语言处理和语音识别等领域。随着Transformer的提出和发展,目标检测领域也开始使用Transformer来提高性能。 DETR是第一篇将Transformer应用于…

点击弹窗页面右侧缩小问题

主页面是由header和下面的tabel&#xff0c;2个组件构成&#xff0c;需要在css里使用flex布局&#xff0c; 就解决了弹窗导致的页面右侧缩小问题。 display: flex; flex-direction: column; <template><div class"main"><div class"header"…

局域网远程控制

被控制端电脑设置 1开启服务 Romate Desktop Services 2设置允许远程控制&#xff0c;并且添加被控制的用户 3检查用户组管理用户名是否一致 我的电脑>管理>本地用户和组>用户 4在控制电脑端WinR 输入 mstsc出现如下界面 输入被控制电脑IP和用户名 然后输入被控制端…

第十届蓝桥杯省赛C++C/研究生组,第十届蓝桥杯省赛JAVAC/研究生组——扫地机器人题解(二分)

题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由 N个方格区域组成&#xff0c;如下图所示。 走廊内部署了 K台扫地机器人&#xff0c;其中第 i台在第 A i A_i Ai​ 个方格区域中。 已知扫地机器人每分钟可以移动到左右相邻的方格中&#xff0c;并将该区域清扫干净…

Android组件通信(二十四)

1. Activity生命周期 1.1 知识点 &#xff08;1&#xff09;掌握Activity的生命周期及操作方法&#xff1b; 1.2 具体内容 范例&#xff1a; 第一个配置文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http…