【RH850U2A芯片】Reset Vector和Interrupt Vector介绍
目录
前言
正文
1. 什么是Reset Vector
1.1 S32K144芯片的Reset Vector
1.2 RH850芯片的Reset Vector
2. 什么是Interrupt Vector
2.1 S32K144芯片的Interrupt Vector
2.2 RH850芯片的Interrupt Vector
3. Reset Vector等价于Interrupt Vector吗
4. 总结
前言
最近在研究符合AUTOSAR架构的OS(代码级别),系统在EcuM_Init调用OS标准接口StartOS之前还做了非常多的准备工作,感觉不把这些地方搞明白就去研究OS有点基础不牢呀,而且后面还发现OS在开始任务调度之前还完成了中断向量表(Interrupt Vector)的重映射,然后ECU第一次上电后还会有一个Reset Vector的概念,二者有什么联系了?本文讲基于NXP的S32K144芯片和Renesas的RH850-U2A芯片谈谈自己对Reset Vector和Interrupt Vector的理解。
ECU系统从上电到运行到main函数之前一般经历了初始化堆栈,初始化RAM,系统初始化等操作,具体可以参考:
S32K平台学习(1)-S32K144启动流程分析
本文参考文档:
1.RH850/U2A-EVA GroupUser’s Manual: Hardware
瑞萨电子 (Renesas Electronics Corporation)
2.Cortex-M4 Devices Generic User Guide
3.ARM Cortex-M4 Processor Technical reference manal
3.ARMv7-M Architecture
4.S32K1xx Series Reference Manual
正文
1. 什么是Reset Vector
Reset Vector也就是系统上电后存放第一个PC指针程序地址的存储空间的首地址值。

1.1 S32K144芯片的Reset Vector
S32K144芯片采用Cotex-M4内核,ARMV7架构,对于系统复位重启后上电的默认操作需要查看ARM相关的的手册,如下图所示:

R13是堆栈寄存器(stack Pointer),在Thread mode下,COTROL寄存器的bit[1]控制stack pointer作为Main Stack Pointer(MSP 这个是reset 值)还是Process Stack Pointer(PSP)
系统复位Reset后,处理器装载0x00000000地址处的四字节值到MSP寄存器。也就是说系统启动的时候,0地址处存放的是MSP寄存器的值。

R15是程序计数器(Program Counter PC)。存储当前程序地址。Reset重启的时候,处理器装载0x00000004地址处的值到PC指针,也就是装载Reset handler的地址到PC指针,PC指针跳转到Reset Handler标号/地址处开始执行Reset Hander标号下的操作。

也就是说,对于S32K144芯片,Reset Vector也就是Reset Handler,也就是以0x0000_0004为首地址的四字节(.long)存储的Reset Handler标号的地址。

Reset Vector/Handler下的具体操作就是跳入到main函数之前的一些系统级操作,如初始化堆栈,初始化RAM,系统初始化等。具体参考前言部分关于S32K启动流程的参考文章。
1.2 RH850芯片的Reset Vector
RH850芯片采用瑞萨公司自定义的内核IP架构(不是ARM,PowerPc,X86等常见嵌入式芯片架构),有自己一套独立的指令集。

但是,关键核寄存器(SP,PC,LR等)和ARMV7架构的核寄存差不多。

RH850-U2A有四个核,每个核的Reset Vector地址可以通过Option Byte(RH850特有的配置字,可以配置系统时钟,Reset Vector地址等很多关键信息)配置,核0(PE0)和核1(PE1)的默认(default)Reset Vector地址是0x0000_0000(也就是说,系统上电后PC指针把0x0000_0000起始地址处存放的程序所在地址装载到PC指针),核2(PE2)和核3(PE3)的默认(default)Reset Vector地址是0x0080_0000(也就是说,系统上电后PC指针把0x0080_0000起始地址处存放的程序所在地址装载到PC指针)。

也就是说,对于RH850芯片,Reset Vector也就是以0x0000_0000/0x0080_0000为首地址的四字节(.long)存储的Reset Handler标号的地址。

2. 什么是Interrupt Vector
中断向量表就是一片地址空间,这段地址空间里面存放了系统所有的中断处理函数的入口地址,包括异常中断处理函数。通常我们在讲中断向量表的时候都是说中断向量表的入口地址。每个系统有自己的中断控制器及对应的中断控制寄存器,我们可以通过改变中断控制寄存器中保存的中断向量表的基地址来对中断向量表进行重映射(也就是在不同地地址空间存放中断向量表,然后在合适的时候把中断向量表地地址赋值给中断向量表寄存器)。
2.1 S32K144芯片的Interrupt Vector
S32K144芯片是ARM-Cotex M4内核,ARMV7架构的芯片,核寄存器VTOR(中断向量表寄存器)中存放的就算Interrupt Vector的起始地址。

也就是说,赋值给VTOR寄存器的地址就是Interrupt Vector的起始地址,在系统启动启动阶段我们把isr_vector的地址赋值给了VTOR寄存器,也就是说Interrupt Vector地起始地址就是isr_vector所在的地址。


2.2 RH850芯片的Interrupt Vector
RH850芯片有两个中断向量表基址寄存器,EBASE存放的是异常中断向量表基地址,INTBP存放的中断向量表的基地址。



也就是说,对于RH850芯片有两个中断向量表寄存器,EBASE存放的是异常中断向量表的基地址,INTBP存放的是正常中断向量表的基地址。
3. Reset Vector等价于Interrupt Vector吗
以RH850芯片为例,PE0的Reset Vector的基地址是0x0000_0000,如果我们赋值0x0000_0000给EBASE,这个时候Exception Handler地基地址从0x0000_00010开始,这个时候我们可以理解为Reset Vector的基地址值等于Exception Interrupt Vector基地址值。
但是如果我们重映射EBASE = 0x0000_0100,这个时候Reset Vector的基地址值不等于Exception Interrupt Vector基地址值。
也就是说,Reset Vector和Interrupt Vector是两个概念,二者的值可能相同。
4. 总结
1. Reset Vector和Interrupt Vector是两个概念,二者的基地址的值可能相同。
2. S32K144的Reset Vector的地址是0x0000_0004,RH850-U2A PE0的Default Reset Vector是0x0000_0000。
3. 中断向量表控制寄存器中存储的值就说中断向量表的基地址,我们在系统开发的不同阶段(BootLoader和APP)会对其进行重映射,也就是BooLoader和APP中中断向量表的基地址是不一样。
4. 异常中断处理函数需要明确定义好,防止系统产生异常中断后找不到异常中断处理函数程序跑飞。
相关文章:
【RH850U2A芯片】Reset Vector和Interrupt Vector介绍
目录 前言 正文 1. 什么是Reset Vector 1.1 S32K144芯片的Reset Vector 1.2 RH850芯片的Reset Vector 2. 什么是Interrupt Vector 2.1 S32K144芯片的Interrupt Vector 2.2 RH850芯片的Interrupt Vector 3. Reset Vector等价于Interrupt Vector吗 4. 总结 前言 最近在…...
Zabbix交换分区使用率过高排查
Zabbix High swap space usage 问题现象 Zabbix 出现Highswap space usage(less than 50% free)告警,提示交换分区空间使用率超过50% 处理过程 1. 确定swap分区是否已占满 free -h登录Zabbix服务器检查内存情况,检查发现Linux服务器空闲的内存还有不少…...
‘HEAD‘ 是 HTTP 请求的一种方法
一、名词解释 ‘HEAD’ 是 HTTP 请求的一种方法,它与 ‘GET’ 方法类似,但有一些关键区别。 当你使用 ‘GET’ 请求时,服务器会返回请求的资源(例如 HTML 页面或文件内容)。而当你使用 ‘HEAD’ 请求时,服务…...
go语言(十七)----json
1、结构体转json package mainimport ("encoding/json""fmt" )type Movie struct{Title string json:"title"Year int json:"year"Price int json:"rmb"Actors []string json:"actors" }func main() {movie : Mo…...
Java笔记 --- 四、异常
四、异常 Java.lang.Throwable Error Exception(异常) 异常的作用 异常的处理方式 JVM默认的处理方式 捕获异常(自己处理) try里面没有出现异常,就不会运行catch里面的代码 如果出现多个异常,需要多个c…...
Ubuntu20.04配置grub ,不必每次都输入 nomodeset
一、查看原来的grub配置: grep menuentry /boot/grub/grub.cfg 重点注意以下类似的核心版本号 gnulinux-5.15.0-92-generic-advanced-86a86651-8070-4338-92ee-8a1a13a98a05 gnulinux-5.15.0-67-generic-advanced-86a86651-8070-4338-92ee-8a1a13a98a05 …...
PBM模型学习(七)核化模型
Nucleation Rate 返回的是成核速率:单位时间内,多少个小颗粒生成,单位,个,/对于fluent而言,这个是对于网格而言,所以单位是:个/m3*s 成核:从无到有,形成一个…...
蓝桥小白赛4 乘飞机 抽屉原理 枚举
👨🏫 乘飞机 🐷 抽屉原理 import java.util.Scanner;public class Main {static int N 100010;static int[] a new int[N];public static void main(String[] args){Scanner sc new Scanner(System.in);int n sc.nextInt();int q s…...
HTML新手教程
HTML入门 教程:【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一.初识HTML HyperTextMarkupLanguage(超文本标记语言) 超文本包括:文字、图片、音频、视频、动画。 HTML5的优势 世界知名浏览器厂商对HTML5的支持市场的…...
P1226 【模板】快速幂题解
题目 给你三个整数a,b,p,求 mod p。 输入输出格式 输入格式 输入只有一行三个整数,分别代表a,b,p。 输出格式 输出一行一个字符串a^b mod ps,其中a,b,p分别为题目给定的值,s为运算结果。 输入输出样例 输入样例 2 10 9 …...
文旅游戏的多元应用场景
文旅游戏在各个领域中找到了广泛的应用,为用户提供了独特的文化体验和娱乐享受。下面将探讨文旅游戏在多个应用场景中的丰富表现。 1. 旅游推广与目的地引导 文旅游戏成为旅游局的一项有力工具,能够将目的地的历史、文化和特色景点巧妙地融入游戏中。通…...
小波变化最通俗的解释,小波变换是用来干什么的,类似小波变换功能的算法有哪些?
问题描述:小波变化最通俗的解释,小波变换是用来干什么的,类似小波变换功能的算法有哪些? 问题解答: 小波变换是一种数学工具,用于分析信号的频域特性。它可以将信号分解成不同频率的子信号,…...
Servlet 与 MVC
主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理&a…...
基于单片机的感应自动门控制器的设计
摘要 现如今自动化、信息化程度越来越高, 单片机的应用领域也越来越广, 成为人们生活不可或缺的一部分。随省社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便千生活的自动控制系统开始进入了人们的生活,以单片机为核…...
兄弟HL-1208黑白激光打印机清零方法
兄弟HL-1208黑白激光打印机基本参数: 产品类型:黑白激光打印机(定位类型家用) 最大打印幅面:A4 最高分辨率:600600dpi 黑白打印速度:20ppm 内存标配:1MB,最大&#…...
第二百八十八回
文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…...
【日常学习笔记】gtest
https://zhuanlan.zhihu.com/p/369466622 int Factorial(int n) {int result 1;for (int i 1; i < n; i) {result * i;}return result; }TEST(TestSuiteName, TestName) 第一个参数可以表示为一个对某一个函数进行测试,第二个参数表示对这个函数测试时的分的几…...
go-zero配置DB的redis缓存
配置定义: # cat internal/config/config.go package configimport ("github.com/zeromicro/go-zero/rest""github.com/zeromicro/go-zero/core/stores/cache" )type Config struct {rest.RestConfCacheRedis cache.CacheConf }对应的配置文件…...
物理服务器
物理服务器 物理服务器是一种独立的、非虚拟化的计算机设备,它通常被用作高性能应用、数据库、存储和网络等关键业务应用的运行平台。物理服务器可以提供更高的处理能力、更好的安全性和可靠性,但需要用户自行维护和管理。 物理服务器的形式多种多样&…...
3.3 实验三:以太网链路聚合实验
HCIA-Datacom实验指导手册:3.3 实验三:以太网链路聚合实验 一、实验介绍:二、实验拓扑:三、实验目的:四、配置步骤:步骤 1 掌握使用手动模式配置链路聚合的方法步骤 2 掌握使用静态 LACP 模式配置链路聚合的…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
