ARC学习(3)基本编程模型认识(三)

笔者来介绍arc的编程模型的中断流程和异常流程

1、中断介绍

主要介绍一下中断进入的流程,包括需要配置的寄存器等信息。

  • 中断号:16-255,总共240个中断。
  • 触发类型:脉冲或者电平触发
  • 中断优先级:16个,0最大,15最小。
  • 中断向量表地址:地址0x400对齐,因为中断+异常的地址总共大小占用0x400的字节
  • 中断向量大小:32位

1.1 中断配置流程

  • 配置全局优先级阈值,STATUS.E[3:0],
  • 关闭外设中断
  • 关闭全局中断,即STATU32.IE 为0,
  • 选择需要配置的中断,IRQ_Select 寄存器,
  • 配置中断优先级,IRQ_Priority
  • 配置触发方式,IRQ_Trigger
  • 清除脉冲,IRQ_PULSE_CANCEL
  • 使能该中断,IRQ_ENABLE
  • 开启全局中断,即STATU32.IE 为1
  • 最后在开启外设中断
    在这里插入图片描述
    注意:首先肯定得开启外设使用,包括总线时钟使能等。

2、异常介绍

主要介绍一些arc-v2版本的异常向量以及异常的处理流程。也分为同步异常和异步的异常:

  • 同步异常:准确的异常,知道准确出错误的数据地址,指令地址等,cpu在发生异常时,立即进入异常处理函数,
  • 异步异常:不准确的异常,在出错之后才发生的异常,发生异常时,不是第一现场
    接下里介绍一下arc-v2的一些异常向量,以及处理异常的一些流程。

2.1 异常向量

异常向量共有16个,向量号0x-0x15,占用64字节,每个异常向量就是一个异常处理函数地址,异常发生后,会从该处取地址,然后跳到对应的处理函数。
在这里插入图片描述
每个异常可能都有多种原因,为了区分多种异常原因,arc这边提供了辅助寄存器来指示异常的原因,有点类似于ARM架构下面的fsr ,详情看ARM学习(3) 异常模式学习(CortexR5),寄存器为ESR,上文中已经介绍过,ARC学习(2)基本编程模型认识(二)。

  • Vector Number,向量号(16-23Bit):指明哪个异常发生
  • Cause 异常原因(8-15Bit):该异常时有什么原因触发,
  • Parameter 参数(0-7Bit):原因的参数是什么,也类似于一种原因类型,进一步细分
  • P:指示异常发生在中断里面
    在这里插入图片描述
    异常的地址由异常地址寄存器指明:EFA,32位,可能是pc地址,可能是数据地址,或者是cache 地址等等。
    在这里插入图片描述

再来看一下异常向量具体会有哪些原因触发:

  1. 复位:Reset,外部信号造成的硬件复位,core寄存器不会被初始化,需要手动初始化。

在这里插入图片描述

  1. 内存错误:
  • 包括总线指令内存错误、
  • 总线数据内存错误,
  • 不存在的memory获取指令
  • 跨多个指令memory类型的指令获取,
  • 跨多个数据memory类型的数据获取,
  • 跨多个mpu region的指令获取,

在这里插入图片描述
在这里插入图片描述
内存类型有如下几种:
在这里插入图片描述

  1. 指令错误,无效的指令或者指令序列

在这里插入图片描述

  1. 机制检查异常
  • 异常里面发生异常,两次异常
  • 指令地址翻译错误,或者一个地址的多次翻译匹配
  • 致命的cache错误
  • 内部memory的指令获取异常
  • 内部memory的数据获取异常
  • 无效的MPU区域重叠
  • 不可屏蔽的异步异常发生或者两次发生
  • 获取向量时,无法纠正的ECC 或者奇偶校验发生,
    在这里插入图片描述在这里插入图片描述
  1. 指令页表缓存未命中(ITLB,Instruction Translation Lookaside Buffer)

在这里插入图片描述

  1. 数据页表缓存未命中(DTLB,Data Translation Lookaside Buffer),包括读写没有命中

在这里插入图片描述

  1. 保护机制违反异常
  • 代码保护机制,栈保护机制,MPU和MMU保护下的内存读 违反机制
  • 代码保护机制,栈保护机制,MPU、MMU和NVM保护下的内存写 违反机制
  • 代码保护机制,栈保护机制,MPU、MMU和NVM保护下的读修改写的违反机制
  • 读主要有:LD,POP,中断离开等
  • 写主要有:ST,PUSH,中断进入等

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 特权违反异常机制
  • 特权违反,比如只允许特权模式操作的指令,比如BRK、SWI和FLAG等
  • 禁止拓展的寄存器访问,比如32以外的寄存器

在这里插入图片描述
10. 软件中断:SWI 或者SWI_S指令会触发该向量处理函数,

在这里插入图片描述

  1. 陷阱异常:TRAP_S指令触发该向量异常处理函数

在这里插入图片描述

  1. 拓展指令异常:例如浮点等指令

在这里插入图片描述

  1. 除0异常:除数为0的异常,STATUS32 的DZ=1,

在这里插入图片描述

  1. 数据cahce 一致异常,不是cache 内存的操作指令 执行了一个data cache的地址。

在这里插入图片描述

  1. 数据未对齐访问异常
  • status32 的AD位置0,则运行对齐检查,未对齐的数据访问,进入该异常,比如32位的数据,处于奇地址。
  • EFA会抓到访问的异常地址。
    在这里插入图片描述
  1. 未对齐的向量内存访问异常

在这里插入图片描述

  1. 保留

异常的优先级和处理顺序:处理器每次都只能处理一个异常,所以当多个异常发生时,要排队处理,涉及到优先处理的异常。
注意:异常的优先级不按异常向量来决定,而是根据异常的原因来进行排序。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 异常流程

异常进入:exception entry

  1. 所有的异常指令被丢弃
  2. ERET 寄存器被赋值PC地址,PC地址为那错误指令的地址,如果是TRAP异常,ERET寄存器保存的是下一条指令。
  3. ESTATUS被赋予STATUS32寄存器的值
  4. ERBTA被赋予异常返回目标分支地址,即BTA的寄存器值
  5. ECR记录了异常向量,异常原因和参数等数据
  6. EFA记录异常的地址,比如当内存访问异常,则EFA记录触发异常的数据地址,如果是指令触发异常,则记录PC的地址,
  7. STATUS32的状态位开始修改,CPU转为内核模式,STATUS32的U bit 置0,中断被禁止,STATUS32的IE bit 置1,处于异常模式,STATUS32的AE bit 置1,STATUS32的EI bit 置0,禁止栈溢出检查,STATUS32的SC bit 置0,禁止除0异常,STATUS32的DZ bit 置0,0赋值循环禁止,STATUS32的L bit 置1,禁止延迟分支阻塞,STATUS32的DE bit 置0,
  8. PC 开始从异常向量表取异常向量,开始跳转到异常处理函数执行。
  9. 异常处理函数需要保存所有用到的寄存器,并且退出时恢复所有的寄存器,

流程图绘制:
在这里插入图片描述

异常退出:exception exit
主要是影响:ERET、ESTATUS和ERBTA,恢复到原来的状态,PC,STATUS32和BTA,以及恢复寄存器等等,相对比较简单。

3、实际例子说明

3.1 数据总线异常

下面例子代码会造成异常,0x3FFFFFFF是memory总线不存在的例子,

ls_u32_t *ptr=0x3FFFFFFF;
printf("0x%x 0x%x\r\n", ptr, *ptr);

实际异常后,打印出如下寄存器信息:

[18999]reg0=0x0001 [18999]reg1=0x0003 [18999]reg2=0x1fd30 [18999]reg3=0x30000000 [18999]reg4=0x0000 [18999]reg5=0x3fffffff [18999]reg6=0x0000 [18999]reg7=0x0000 [18999]reg8=0x10004f68 [18999]reg9=0x0001 [18999]reg10=0x1a17a [18999]reg11=0x0000 [18999]reg12=0x10004ef7 [18999]reg13=0x0000 [18999]reg14=0x0000 [18999]reg15=0x100006a0 [18999]
[18999]reg16=0x103f4 [18999]reg17=0x0000 [18999]reg18=0x0000 [18999]reg19=0x0020 [18999]reg20=0x0001 [18999]reg21=0x0080 [18999]reg22=0x0000 [18999]reg23=0x0000 [18999]reg24=0x0000 [18999]reg25=0x0000 [18999]reg26=0x0000 [18999]reg27=0x10005000 [18999]reg28=0x10004f8c [18999]reg29=0x172ee [18999]reg30=0x10004f68 [18999]pc=0x4000959c lr=0x1fd2c sp=0x10004f8c status32=0x80081624 
[18999]ECR=0x11000 ERET=0x4000ca54 EFA=0x3fffffff ERSTATUS=0x84004 

提取出如下异常寄存器如下:
ECR=0x11000
ERET=0x4000ca54
EFA=0x3fffffff
ERSTATUS=0x84004

如ECR寄存器的值,我们可以找到如下说明,看到是访问data memory异常,符合预期异常。
在这里插入图片描述
然后EFA=0x3FFFFFFF,就是异常访问的地址信息,确实是异常的地址,

最后ERET,就是异常的返回地址,可以通过addr2line 然后定位源代码位置。

3.2 地址总线异常

再看一一个异常例子。
在这里插入图片描述
ECR=0x1000
ERET=0x3f8eec48
EFA=0x3f8eec48
ERSTATUS=0x80084804
如ECR寄存器的值,我们可以找到如下说明,看到是访问指令 memory异常
在这里插入图片描述
看到ERET和EFA,均是0x3f8eec48,怀疑是CPU跑飞到一块异常地址,该地址的值均是0x3f8eec48,所以ERET和EFA相等。

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

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

相关文章

【git1】指令,commit,免密

文章目录 1.常用指令:git branch查看本地分支, -r查看远程分支, -a查看本地和远程,-v查看各分支最后一次提交, -D删除分支2.commit规范:git commit进入vi界面(进入前要git config core.editor vim设一下vi模…

DVWA-XSS(Stored)-httponly分析

拿DVWA的XSS为例子 httponly是微软对cookie做的扩展。这个主要是解决用户的cookie可能被盗用的问题。 接DVWA的分析,发现其实Impossible的cookie都是设置的httponly1,samesite1. 这两个参数的意思参考Set-Cookie HttpOnly:阻止 JavaScript 通过 Documen…

Java项目:基于SSM框架实现的精品酒销售管理系统分前后台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的精品酒销售管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功…

微信公众号 H5授权登录实现(最详细)

一、微信公众号 (一)基础信息 微信授权类型 自己的网站、APP等第三方,要实现接入微信授权登录,有多种方式:微信公众号(网页)、微信小程序、微信开放平台(APP)等等。 【…

面试:关于word2vec的相关知识点Hierarchical Softmax和NegativeSampling

1、为什么需要Hierarchical Softmax和Negative Sampling 从输入层到隐含层需要一个维度为NK的权重矩阵,从隐含层到输出层又需要一个维度为KN的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但…

详细解析MATLAB和Simulink中的文件格式:mat, mdl, mexw32, 和 m 文件

matlab 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文件**MAT 文件 (.mat)****MDL 文件 (.mdl)****MEX 文件 (.mexw32/.mexw64)****M 文件 (.m)****总结** 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文件 当你开始使用M…

Python 虚拟环境 requirements.txt 文件生成 ;pipenv导出pip安装文件

搜索关键词: Python 虚拟环境Pipenv requirements.txt 文件生成;Pipenv 导出 pip requirements.txt安装文件 本文基于python版本 >3.9 文章内容有效日期2023年01月开始(因为此方法从这个时间开始是完全ok的) 上述为pipenv的演示版本 使用以下命令可精准生成requirement…

Java8 --- Gradle7.4整合IDEA

目录 一、Gradle整合IDEA 1.1、Groovy安装 1.1.1、配置环境变量 ​编辑 1.2、创建项目 ​编辑 1.3、Groovy基本语法 1.3.1、基本语法 1.3.2、引号 1.3.3、语句结构 1.3.4、数据类型 1.3.5、集合操作 1.4、使用Gradle创建普通Java工程 1.5、使用Gradle创建Java ss…

使用 axios 进行 HTTP 请求

使用 axios 进行 HTTP 请求 文章目录 使用 axios 进行 HTTP 请求1、介绍2、安装和引入3、axios 基本使用4、axios 发送 GET 请求5、axios 发送 POST 请求6、高级使用7、总结 1、介绍 什么是 axios axios 是一个基于 promise 的 HTTP 库,可以用于浏览器和 Node.js 中…

计算机组成入门知识

前言👀~ 数据库的知识点先暂且分享到这,接下来开始接触计算机组成以及计算机网络相关的知识点,这一章先介绍一些基础的计算机组成知识 一台计算机如何组成的? 存储器 CPU cpu的工作流程 主频 如何衡量CPU好坏呢&#xff1f…

我的常见问题记录

1,maven在idea工具可以正常使用,在命令窗口执行出现问题 代码: E:\test-hello\simple-test>mvn clean compile [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for org.consola:simple-test:jar…

【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑

Reconciler 使React核心逻辑所在的模块,中文名叫协调器,协调(reconciler)就是diff算法的意思 reconciler有什么用? 在前端框架出现之前,通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库,开发者需要…

【windows解压】解压文件名乱码

windows解压,文件名乱码但内容正常。 我也不知道什么时候设置出的问题。。。换了解压工具也没用,后来是这样解决的。 目录 1.环境和工具 2.打开【控制面板】 3.点击【时钟和区域】 4.选择【区域】 5.【管理】中【更改系统区域设置】 6.选择并确定…

算是一些Transformer学习当中的重点内容

一、基础概念 Transformer是一种神经网络结构,由Vaswani等人在2017年的论文Attentions All YouNeed”中提出,用于处理机器翻译、语言建模和文本生成等自然语言处理任务。Transformer同样是encoder-decoder的结构,只不过这里的“encoder”和“…

完美解决找不到steam_api64.dll无法执行代码问题

游戏缺失steam_api64.dll通常意味着该游戏依赖于Steam平台的一些功能或服务,而这个DLL文件是Steam客户端的一部分,用于游戏与Steam平台之间的交互。如果游戏中缺失这个文件,可能会出现无法启动、崩溃或其他问题。 一,详细了解stea…

第13关:存储过程1、第14关:存储过程2。(2021数据库期末一)

目录 首先需要学习和了解的知识 第13关:存储过程1 任务描述 答案 第14关:存储过程2 任务描述 答案 本篇博客的答案博主是学习别人得来的,敢于借鉴和学习哈哈!! 首先需要学习和了解的知识 了解什么是存储过程以及…

音频——性能测试中的基本概念

文章目录 频率响应平均电平增益ADC 路径增益DAC 路径增益底噪信噪比总谐波失真+噪声(THD+N)延迟频率响应 对于音频设备,频率响应可以理解为音频设备对不同频率信号的处理或重现。对于音频信号频率,一般关注20Hz~20kHz范围。理想情况下,输入幅度相同的不同频率信号,过音频…

吴恩达机器学习 第二课 week4 决策树

目录 01 学习目标 02 实现工具 03 问题描述 04 构建决策树 05 总结 01 学习目标 (1)理解“熵”、“交叉熵(信息增益)”的概念 (2)掌握决策树的构建步骤与要点 02 实现工具 (1)…

常见的七大排序

目录 前言 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快排 归并排序 前言 本文介绍七种常见的排序方式:冒泡排序,选择排序,插入排序,堆排序,希尔排序,快排,归并排序 冒泡排序 将每2…