【ARMv8M Cortex-M33 系列 7.1 -- xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】


请阅读【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】


文章目录

    • 问题背景
    • Cortex-M33 Fault 寄存器介绍
      • xPSR (程序状态寄存器)
      • CFSR (可配置故障状态寄存器)
      • HFSR (硬件故障状态寄存器)
      • BFAR (总线故障地址寄存器)
      • MMFAR (内存管理故障地址寄存器)

问题背景

由于在RA4M2(Cortex-M33)移植RT-Thread OS的时候遇到了 Hardfault,不知道如何分析错误原因,后参考以前写的文章【ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析】 来查找原因。

Cortex-M33 Fault 寄存器介绍

在 ARM Cortex-M33 微控制器上,当发生异常或错误时,一些特殊的寄存器提供了用于调试和错误处理的关键信息。这些寄存器包括程序状态寄存器 (xPSR)、可配置故障状态寄存器 (CFSR)、硬件故障状态寄存器 (HFSR)、总线故障地址寄存器 (BFAR) 和内存管理故障地址寄存器 (MMFAR) 以及 UFSR(UsageFault Status Register)。

xPSR (程序状态寄存器)

xPSR 寄存器包含多个状态字段,包括程序状态、中断或异常返回状态以及其他系统状态。
在这里插入图片描述

其中最重要的字段是:

  • APSR (应用程序状态子字段): 包括 Negative, Zero, Carry, Overflow 和 Saturation 状态标志。
  • IPSR (中断程序状态子字段): 表示当前激活的异常编号。
  • EPSR (执行程序状态子字段): 包括 Thumb状态位,它应始终被设置为1,因为 Cortex-M33 只能执行 Thumb 指令集。

CFSR (可配置故障状态寄存器)

32-bit read/write-one-to-clear register located at 0xE000ED28.
在这里插入图片描述

CFSR 寄存器用于提供有关内存管理、总线和使用错误的详细信息。它分为三个部分:

  • MFSR (内存管理故障状态寄存器子字段): 提供内存管理故障信息,例如违反内存保护单元 (MPU) 规则。
  • BFSR (总线故障状态寄存器子字段): 提供总线访问故障信息,如非法地址访问或总线错误。
  • UFSR (使用错误状态寄存器子字段): 提供特定错误的信息,例如非法指令、未对齐的访问或除零操作。 在这里插入图片描述
    Secure software can access the Non-secure version of this register via UFSR_NS located at 0xE002ED2A.
    The location 0xE002ED2A is RES0 to software executing in Non-secure state and the debugger.

HFSR (硬件故障状态寄存器)

在这里插入图片描述
HFSR 寄存器提供有关所有硬件故障的信息。它包括字段,如调试事件或向量表硬故障。

BFAR (总线故障地址寄存器)

在这里插入图片描述

BFSRBFARVALID 位被设置时,BFAR 寄存器包含了导致总线故障的地址。
在这里插入图片描述

MMFAR (内存管理故障地址寄存器)

在这里插入图片描述

MMFSRMMARVALID 位被设置时,MMFAR 寄存器包含了导致内存管理故障的地址。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

muduo 网络库源码解析和使用

1. base 模块 1.1 API 1.1.1 eventfd int eventfd(unsigned int initval, int flags);(1)类似信号量;其内部保存了一个 uint64_t 计数器 count,使用 initval 初始化; (2)read 没有设置 EFD…

ACM:每日学习 状压dp

状压dp: 状压dp是对一般dp的改进: //对于判断多种物品的取法,开多维数组比较麻烦,也不好开,使用二进制来表示物品的取与否。 //使用二进制的话,位运算就更能省时间了,而且更会节省空空间&…

02-编程猜谜游戏

本章通过演示如何在实际程序中使用 Rust,你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题:猜谜游戏。 工作原理如下:程序将随机生成一个介于 1 和 100 之间的整数。然后,程序…

【算法实验】实验六

实验6-1 硬币找钱问题—贪心 问题描述: 设有6 种不同面值的硬币,各硬币的面值分别为5 分,1 角,2 角,5 角,1 元,2 元。现要用这些面值的硬币来购物和找钱。购物时可以使用的各种面值的硬币个数存…

CHS_01.2.2.1+调度的概念、层次

CHS_01.2.2.1调度的概念、层次 调度的概念、层次知识总览调度的基本概念调度的三个层次——高级调度![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6957fdec179841f69a0508914145da36.png)调度的三个层次——低级调度调度的三个层次——中级调度补充知识&#xff…

Wheeltec小车的开发实录(1)

sudo mount -t nfs 192.168.58.101:/home/wheeltec/wheeltec_robot /mnt 报错 mount: /mnt: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program. 解决办法 主机和从机都要安装 nfs-utils 安装nfs-utils su…

Android Termux技能大揭秘:安装MySQL并实现公网远程连接

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装MariaDB二. 安装cpolar内网穿透工具三. 创建安全隧道映射mysql四. 公网…

25计算机考研408专业课复习计划

点击蓝字&#xff0c;关注我们 今天要分享的是25计算机考研408专业课复习计划。 以下内容供大家参考&#xff0c;大家要根据自己的复习情况进行适当调整。 统考与自命题 统考科目是指计算机学科专业基础综合&#xff08;408&#xff09;&#xff0c;满分150分&#xff0c;试…

tomcat原理模拟和tomcat优化

1、tomcat实现原理 servlet 没有主方法main&#xff0c;依赖tomcat才能运行&#xff0c;因为tomcat 有主方法main&#xff0c;由java编写 servlet中doGet和doPost方法属于非静态方法&#xff0c;只能依托new对象存在&#xff0c;tomcat无法new出来对象&#xff0c;因此tomcat…

NLP论文阅读记录 - 2021 | WOS 使用预训练的序列到序列模型进行土耳其语抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1 预训练的序列到序列模型2.2 抽象文本摘要 三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结…

一文读懂JavaScript DOM节点操作(JavaScript DOM节点操作详解)

一、什么是节点 二、节点类型 1、元素节点 2、属性节点 3、文本节点 4、节点类型、名字、值表格 三、通过文档对象方法获取节点 1、通过id属性获取节点 2、通过标签名字获取节点 3、通过类名获取节点 4、通过name属性获取节点 四、通过层级关系获取节点 1、子节点 …

【Flink-CDC】Flink CDC 介绍和原理概述

【Flink-CDC】Flink CDC 介绍和原理概述 1&#xff09;基于查询的 CDC 和基于日志的 CDC2&#xff09;Flink CDC3&#xff09;Flink CDC原理简述4&#xff09;基于 Flink SQL CDC 的数据同步方案实践4.1.案例 1 : Flink SQL CDC JDBC Connector4.2.案例 2 : CDC Streaming ETL…

从 Context 看 Go 设计模式:接口、封装和并发控制

文章目录 Context 的基本结构Context 的实现和传递机制为什么 Context 不直接传递指针案例&#xff1a;DataStore结论 在 Go 语言中&#xff0c; context 包是并发编程的核心&#xff0c;用于传递取消信号和请求范围的值。但其传值机制&#xff0c;特别是为什么不通过指针传递…

【大数据分析与挖掘技术】概述

目录 一、数据挖掘简介 &#xff08;一&#xff09;数据挖掘对象 &#xff08;二&#xff09;数据挖掘流程 &#xff08;三&#xff09;数据挖掘的分析方法 &#xff08;四&#xff09;经典算法 二、Mahout &#xff08;一&#xff09;Mahout简介 &#xff08;二&#…

CVE-2023-46226 Apache iotdb远程代码执行漏洞

项目介绍 Apache IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点&#xff0c;完美对接 Hadoop 与 Spark 生态&#xff0c;适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。 项目地址 https://io…

【INTEL(ALTERA)】F-tile 参考时钟和系统 PLL 时钟英特尔® FPGA IP无法锁定在特定频率?

说明 由于在英特尔 Quartus Prime Pro Edition 软件 22.2 及更早版本中存在一个问题&#xff0c;您可能会观察到 F-tile 参考时钟和系统 PLL 时钟英特尔 FPGA IP无法锁定&#xff1a; 999.9 MHz&#xff0c;参考时钟频率设置为 323.2 MHz。506.88 MHz&#xff0c;参考时钟频率…

Windows系统使用手册

点击前往查看&#x1f517;我的博客文章目录 Windows系统使用手册 文章目录 Windows系统使用手册Windows10解决大小核调度问题Windows系统安装软件Windows系统Typora快捷键Windows系统压缩包方式安装redisWindows安装dockerWindows系统的docker设置阿里源Windows系统下使用doc…

Ubuntu系统pycharm以及annaconda的安装配置笔记以及问题集锦(更新中)

Ubuntu 22.04系统pycharm以及annaconda的安装配置笔记以及问题集锦 pycharm安装 安装完之后桌面上并没有生成图标 后面每次启动pycharm都要到它的安装路径下的bin文件夹下&#xff0c; cd Downloads/pycharm-2018.1.4/bin然后使用sh命令启动脚本程序来打开pycharm sh pycha…

01 MyBatisPlus快速入门

1. MyBatis-Plus快速入门 版本 3.5.31并非另起炉灶 , 而是MyBatis的增强 , 使用之前依然要导入MyBatis的依赖 , 且之前MyBatis的所有功能依然可以使用.局限性是仅限于单表操作, 对于多表仍需要手写 项目结构&#xff1a; 先导入依赖&#xff0c;比之前多了一个mybatis-plus…

动态规划汇总

作者推荐 视频算法专题 简介 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程。每次决策依赖于当前状态&#xff0c;又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的&#x…