Cortex-R52+的PE mode详解--Abort

news2024/9/21 10:50:34

目录

1.R52+ AArch32通用寄存器描述

2.Abort模式是什么

3.实例详解


1.R52+ AArch32通用寄存器描述

上篇文章我们阐述了关于R52+异常如何定位,其中详细说明了发生异常后应该在什么模式下去观察寄存器。

今天就以Abort异常为例,详解下如何精准定位Abort异常。

首先回顾下,在AArch32执行态下有哪些寄存器是模式私有,如下图:

左侧Appliaction层级视角表示当前模式的状态,右侧系统层级视角则表示不同模式下的寄存器名;我们在调试器可以清晰看到SP_svc、SP_abt这些寄存器的名字。

那么我们如何判断当前处于什么模式呢?我们可以看APSR或者CPSR寄存器,AArch32下位域定义如下:

我们可以通过M位域看到当前处于什么模式,如下图:

一般来说,R52+上电起来运行在EL2,对应Hyp模式;在完成各种初始化后,会进入到EL1模式,即Supervisor;一旦发生异常,会有相应的SPSR(Saved Program Status Register)在进入异常前保存当前状态。

那么我们如何判断是否进入Abort模式?只需要在异常函数while(1)找CPSR.M即可。

2.Abort模式是什么

之前我们讲过,当我们触发了MPU保护时,R52+会进入到Abort_Hanlder,包括Prefetch_Abort和Data_Abort。

个人理解,所谓Abort就是处理器的内存系统没办法成功完成一个内存的访问,这个时候就会产生Abort。

举个例子,CPU发送指令给memory,告诉它到哪个位置写入或者读取数据,在memory这一层肯定会判断CPU发的这个地址是不是对的呀,如果发现了异常,它就会告诉CPU:你这个不对嗷,你自己看着吧。

因此,在R52+里,会造成Abort异常一般都有如下几种原因:

  • 接受到芯片内部总线(例如AMAB总线)系统返回的错误响应;
  • 触发了MPU的保护;
  • TCM内部出现了ECC错误等等 

具体来讲,如果是CPU进行指令预取发生了错误,就会产生prefetch abort,我们可以通过系统寄存器IFSR找到错误类型,通过IFAR找到是哪条指令出的问题;

如果是数据访问,就会产生data abort,同样的,我们可以通过DFSR找到错误状态,通过DFAR到错误地址,

刚好这个也对应了R52+ 的两个异常向量:PrefetchAbort_Hanlder和DataAbort_Handler。

其实,在这里突然想到了,如果TCM里面出现了ECC错误,那么DataAbort就会一直发生,那到底在DataAbort_Handler,我们看到的LR和SPSR是否是最开始发生错误的值?这要打个大大问号。

除了按指令、数据进行分类,Abort也按照同步或者异步进行分类;

同步Abort:Synchronous,指的是这个Abort异常就是在当前指令发生的,我们可以通过LR_abt来查看触发该异常的指令,通过SPSR_abt来查看异常发生时的状态;

异步Abort:Asynchronous,指的是已经产生Abort异常,但是代码还继续跑了一会,这个时候就很难定位到问题,往往异步Abort是最致命的。基本还没遇到过异常Abort这种情况。

3.实例详解

说了这么多,我们还是拿个具体例子来说说。

假设现在进了Prefetch Abort Handler里面,按照规矩,我们首先查看IFSR、IFAR,具体如下:

假设现在出现了Synchronous parity error on memory access,并且是memory(slave)回的错误响应,那么这个值就为0x218;进一步,如果我们想知道具体是哪个slave的问题,我们就需要看辅助寄存器AIFSR:

如果是ECC错误,并且是ATCM发生了,这个寄存器的值就是0x12;

再进一步,如果我们想知道ECC发生的错误位置,我们可以看寄存器 IMP_TCMERR0\1、IMP_TCMSYNDR0\1,具体如下:

 IMP_TCMERRx.RAMID会告知是TCM哪个bank发生的错误,以及访问的地址。

IMP_TCMSYNDR0\1则表示具体的错误,从而可以计算出哪一个bit发生的错误。

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

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

相关文章

一文读懂网络安全等级保护

网络安全等级保护(简称“等保”)是我国为了保护信息安全而推出的一项制度,旨在通过对信息系统分等级实施安全保护,确保信息安全。它涵盖了信息和存储、传输、处理这些信息的信息系统,以及使用的信息安全产品。等级保护…

素数筛的一个易错点

前言&#xff1a;之前运用素数筛的时候都没注意&#xff0c;一个不是素数的数可能会被反复标记为1 题目地址 #include <bits/stdc.h> using namespace std; #define int long longconst int N (int)3e7 10; int a[N]; int n;signed main() {// 1// 2 2 // 3 3// 4 2cin…

从100G到400G:利用多模光纤升级数据中心网络

数据中心网络的持续发展 数据中心网络的持续发展涵盖了两个关键方面。首先&#xff0c;必须应对由机器学习和物联网等数据密集型应用所带来的带宽和流量需求的增长挑战&#xff0c;这些应用正在推动现有10G和40G链路的升级&#xff1b;其次&#xff0c;为了满足日益提升的可持…

ARP:IP到MAC地址转换

网络中的ARP协议&#xff0c;它是IP地址到MAC地址转换的关键。通过ARP请求&#xff08;Req&#xff09;和响应&#xff08;Rsp&#xff09;&#xff0c;设备能够找到对应IP的物理地址&#xff0c;从而实现网络通信。 ARP req&#xff1a;广播 主机1mac:02:c2:c2:52:e5:e1 主机…

使用 Elastic 和 LM Studio 的 Herding Llama 3.1

作者&#xff1a;来自 Elastic Charles Davison, Julian Khalifa 最新的 LM Studio 0.3 更新使 Elastic 的安全 AI Assistant 能够更轻松、更快速地与 LM Studio 托管模型一起运行。在这篇博客中&#xff0c;Elastic 和 LM Studio 团队将向你展示如何在几分钟内开始使用。如果你…

顺风车 萝卜快跑!做人,什么是格局,什么是境界?——早读(逆天打工人爬取热门微信文章解读)

萝卜快跑&#xff01; 引言Python 代码第一篇 洞见 做人&#xff0c;什么是格局&#xff0c;什么是境界&#xff1f;第二篇 股市风云结尾 &#xff08;哈哈 订单已取消&#xff09; 引言 今天难受 把昨天买的票加入黑名单 太差了 早上一来低开4个多点 把我昨天的利润全没了 然…

微生物分类检测系统源码分享

微生物分类检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

代理服务器及其原理

代理服务器的代理可以分为正向代理和反向代理&#xff0c;本篇将讲解这两种代理方式的原理&#xff0c;以及对应的功能特点和应用场景。最后还对比和 NAT 和代理服务器的区别。 目录 正向代理 工作原理 功能特点 应用场景 反向代理 基本原理 应用场景 NAT和代理服务器…

mybatis-plu分页出现问题

还真能遇到版本导致的问题&#xff1a; mybatis-plus.使用分页插件出现count(),缺少* 查看你mybtis-plus的版本&#xff0c;将3.4.2换掉

Docker日志管理之Filebeat+ELK日志管理

所需安装包及镜像 安装步骤 把所需镜像导入到Docker容器 打开/etc/sysctl.conf配置文件&#xff0c;添加参数 打开资源限制配置文件&#xff0c;添加参数 创建一个网络 在根目录下创建一个项目目录 创建Elasticsearch子目录 在项目目录下创建Elasticsearch子目录 将安装Elast…

如何构建适合企业需求的即时通讯与音视频通话私有化平台?

在数字化转型的浪潮中&#xff0c;企业对于内部沟通的需求日益复杂化和多元化。传统的沟通方式已难以满足高效协作、信息安全及个性化定制的需求。因此&#xff0c;“即时通讯音视频通话”集成的私有化部署软件应运而生&#xff0c;成为企业优化内部沟通、提升工作效率的得力助…

如何在Linux虚拟机上安装和配置JDK

1. 下载jdk 首先&#xff0c;访问Oracle官方网站下载JDK安装包。这里以JDK 8为例&#xff1a; 1. 访问 Oracle JDK 下载页面。 Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/ 2. 选择合适的版本&#xff08;如JDK 8&#xff09;并下载适用于L…

VS code 写下 print 时让编译器自动添加括号

VS code 当写下 print 时让编译器自动添加括号 引言正文 引言 最近本人由于某些原因开始使用 VS code 编译器了&#xff0c;相较于 PyCharm 编译器&#xff0c;VS code 速度非常快&#xff0c;且占用空间少&#xff0c;extension 也很多&#xff0c;用户可以根据自己的喜好进行…

知识|智能网联汽车多域电子电气架构会如何发展?

摘要&#xff1a;随着汽车智能化和网联化技术的快速发展&#xff0c;传统的电子电气架构已经无法满足未来车路云网一体化发展的新需求。本文聚焦于未来智能网联汽车的多域电子电气架构&#xff0c;并从总体设计、硬件系统、通信系统和软件系统四个方面对现有技术进行了详细的综…

二叉树c++(level up)

目录 1.搜索二叉树 1.1概念 1.2操作 1.2.1.查找 1.2.2插入 1.2.3遍历 1.2.4删除&#xff08;重点&#xff09; 1.3K模型/KV模型 1.4性能分析 2.二叉树oj 1.创建字符串 2.层序遍历 3.二叉树的最近公共祖先 4.二叉搜索树与双向链表 5.前序中序构建二叉树 6.中序后续…

基于"WT2605C的智能血压计:AI对话引领个性化健康管理新时代,健康守护随时在线

在当今快节奏的生活中&#xff0c;健康管理已成为我们日常不可或缺的一部分。随着科技的进步&#xff0c;智能设备正逐步融入我们的日常生活&#xff0c;为健康管理带来前所未有的便捷与智能化。今天&#xff0c;让我们共同探索WT2605C AI在线方案如何在血压计中发挥革命性作用…

线性回归_最小二乘法

from numpy import * import matplotlib.pyplot as plt1.导入数据 # 1.导入数据 # 模型 y wx b points genfromtxt(linear_regress_lsm_data.csv, delimiter,) N len(points) print(point count %d%N) x array(points[:, 0]) y array(points[:, 1]) plt.scatter(x, y) p…

超详细超实用!!!零基础java开发之云风笔记笔记列表接口模糊查询(八)

云风网 云风笔记 云风知识库 笔记列表数据接口除了获取全部数据&#xff0c;还需要考虑分页获取/以及各个参数查询获取数据。这样才符合日常需要。 模糊查询一般是定义一个固定的查询参数searchName,查询同数据类型的参数&#xff0c;比如都是字符串数据类型。由于我们名称、类…

网络插件 Cilium 更换 Calico

网络插件 Cilium 更换 Calico 集群使用 submariner &#xff0c;通过网络检测发现 Cilium 插件可能兼容性不太好 subctl diagnose allCilium 彻底卸载 helm uninstall cilium -n kube-system# 检查集群中的所有 CNI 插件&#xff08;集群的每个节点都需要删除&#xff09; s…

ELK在Linux服务器下使用docker快速部署(超详细)

ELK是什么&#xff1f; 首先说说什么是ELK ELK 是一个开源的日志管理和分析平台&#xff0c;由三个主要组件组成&#xff1a; Elasticsearch&#xff1a;一个分布式搜索和分析引擎&#xff0c;能够快速存储、搜索和分析大量数据。它是 ELK 堆栈的核心&#xff0c;负责数据的…