【Cortex-M3权威指南】学习笔记4 - 异常
目录
- 实现 CM3
- 流水线
- CM3 详细框图
- CM3 总线接口
- 总线连接模板
- 异常
- 异常类型
- 优先级定义
- 优先级组
- 向量表
- 中断输入于挂起
- NMI
- 中断挂起
- Fault 类异常
- 总线 faults
- 存储器管理 faults
- 用法 faults
- SVC 与 PendSV
实现 CM3
流水线

CM3 处理器使用 3 级流水线,分别是:取指,解码和执行
CM3 有时候会一次取出两个 16 位指令(合计 32 位指令),先处理一个然后等一个周期后再处理下一个
处于对 Thumb 兼容性考虑,取 PC 时,会返回当前指令地址+4 值
处理器内核预取单元有一个指令缓冲区,让后续执行的指令在这里排队
CM3 详细框图

| 缩写 | 含义 |
|---|---|
| NVIC | 嵌套向量中断控制器 |
| SYSTICK Timer | 一个简易的周期定时器,用于提供时基,亦被操作系统所使用 |
| MPU | 存储器保护单元(可选) |
| CM3BusMatrix | 内部的 AHB 互连 |
| AHB to APB | 把 AHB 转换为 APB 的总线桥 |
| SW-DP/SWJ-DP | 串行线调试端口/串行线 JTAG 调试端口。通过串行线调试协议或者是传统的 JTAG 协议(专用于 SWJ-DP),都可以用于实现与调试接口的连接 |
| AHB-AP AHB | 访问端口,它把串行线/SWJ 接口的命令转换成 AHB 数据传送 |
| ETM | 嵌入式跟踪宏单元(可选组件),调试用。 用于处理指令跟踪 |
| DWT | 数据观察点及跟踪单元,调试用。这是一个处理数据观察点功能的模块 |
| ITM | 仪器化跟踪宏单元 |
| TPIU | 跟踪单元的接口单元。所有跟踪单元发出的调试信息都要先送给它,它再转发给外部跟踪捕获硬件的 |
| FPB Flash | 地址重载及断点单元 |
| ROM 表 | 一个小的查找表,其中存储了配置信息 |
CM3 处理器中各个重要模块介绍:
- CM3Core:CPU
- NVIC:支持中断嵌套,向量中断机制可以在中断发生时,自动取出对应服务例程的入口地址
- SysTick 定时器:在 NVIC 内部实现,可以每隔一定时间产生中断,即便系统睡眠也可以工作
- 存储器保护单元:把存储器划分为多个区进行保护
- BusMatrix:CM3 总线核心,通过他让数据在不同总线间传输
- AHB to APB Bridge:总线桥,把多个 APB 设备连接到私有外设总线
- SW-DP/SWJ-DP:串行调试
- AHB-AP:无
- ETM 嵌入式跟踪宏单元:实时指令跟踪,
- DWT 数据观察点及跟踪单元:通过其设置数据观察点
- ITM 仪器化追踪宏单元:无
- FPB:提供 flash 地址重载与断点功能
CM3 总线接口
I-Code 总线 一条 32 位总线,进行取指操作
D-Code 总线 一条 32 位总线,进行数据访问操作,连接到该总线的设备不需要支持非对齐访问
系统总线 负责数据传送,他们都是对齐的
外部私有外设总线 基于 APB 协议的 32 为总线,负责私有外设访问
调试访问端口总线 专用于挂接调试接口
总线连接模板

异常
异常类型
编号为 1-15 的对应系统异常,大于等于 16 的则全是外部中断
中断不等于异常
15 个可用的系统异常表

优先级定义
优先级的数值越小,则优先级越高。
CM3 支持中断嵌套,使得高优先级异常会抢占(preempt)低优先级异常
三个特殊的系统异常:复位,NMI 以及硬 fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常
CM3 还把 256 级优先级按位分成高低两段,分别称为抢占优先级和子优先级
NVIC 中有一个寄存器保存优先级组,他把优先级分为两段:
MSB 所在的位段对应抢占优先级; LSB 所在的位段对应子优先级
优先级组
CM3 支持 8 个不同的中断优先级,通常被分成 4 个优先级组
CM3 中断优先级组分配的四种主流方式:
Preemptive Priority Grouping (0 位抢占优先级组):
这种模式下,优先级分组被禁用,所有中断的优先级都是唯一的。优先级值高的中断总是可以打断正在执行的优先级值低的中断。这是最简单的中断优先级模式,但在复杂的应用中可能不够灵活。
No Preemptive Priority Grouping (4 位抢占优先级组):
这种模式下,中断被分为 4 个优先级组,每组内有 2 个优先级。每个组的中断不会互相打断,但是一个组内的高优先级中断可以打断低优先级中断。这提供了一定程度的分层和优先级控制。
Priority Grouping (3 位抢占优先级组):
这种模式下,中断被分为 8 个优先级组,每组内有 1 个优先级。这意味着每个中断都有唯一的优先级,没有中断会被其他中断完全屏蔽。这提供了更精细的优先级控制,但在复杂应用中可能需要更多的配置。
Priority Grouping (2 位抢占优先级组):
这种模式下,中断被分为 16 个优先级组,每组内有 1 个优先级。与上述模式相比,这种模式提供了更大的灵活性,但配置会更加复杂。
向量表
Cortex-M3 处理器使用中断向量表来管理不同中断的入口地址。
中断向量表是一个存储了中断处理程序地址的数组,每个元素对应一个特定的中断号。
当中断发生时,处理器会根据中断号从向量表中读取对应的地址,然后跳转到相应的中断处理程序。
中断向量表通常位于内存的起始地址处。向量表中的每个元素都是一个 4 字节(32 位)的地址,指向对应中断的处理程序
可以在 SRAM 中开出一块空间用于存储向量表
中断输入于挂起
NMI
NMI(Non-Maskable Interrupt,非屏蔽中断)是一种特殊类型的中断,在嵌入式系统中常用于处理一些紧急和重要的事件。与普通的可屏蔽中断不同,NMI 是无法被屏蔽或阻止的中断,即使处理器处于屏蔽中断状态(例如,全局中断被禁用),NMI 仍然可以触发。
当 NMI 发生时,处理器会跳转到 NMI 处理程序的入口地址执行相应的操作
中断挂起

中断输入脚置位有效后,他就被挂起,此时无法撤销中断请求
若在中断得到响应前消除挂起状态,则中断被取消
中断服务例程开始执行时,其挂起状态会被硬件自动清除
中断源一直维持中断请求信号,则该中断再完成一轮服务历程后又会被立刻赋予挂起状态进行下一轮
中断源以脉冲的形式发送 N 多个中断请求信号,最终只会接受一个
Fault 类异常
总线 faults
该 fault 可能产生的情况:
- 当 AHB 接口上正在传送数据时,回复了一个错误信号
- 在处理器启动中断服务序列(sequence)后读取向量时
- 中断处理起始阶段的堆栈 PUSH 动作
- 中断处理收尾阶段的堆栈 POP 动作
总线 fault 一旦检测到更高优先级异常,就会先执行后者,自己就挂起
总线 fault 是被某同级或更高优先级异常的服务例程引发的,则会变成硬 fault,使得最后执行的是硬 fault 的服务例程
欲使能总线 fault 服务例程前,总线 fault 服务例程的入口地址必须已经在向量表中配置好
总线 fault 状态寄存器(BFSR) 位于 NVIC 内部,可以找出产生 fault 的原因
存储器管理 faults
触发该 faults 的原因有如下四点:
- 访问了所有 MPU regions 覆盖范围之外的地址
- 访问了没有存储器与之对应的空地址
- 往只读 region 写数据
- 用户级下访问了只允许在特权级下访问的地址
MemManage fault 被除能,则会上访成硬 faults
若该硬 faults 执行时又导致了 MemManage fault,则内核被锁定
MemManage fault 必须被使能才能正常响应
用法 faults
用法 faults 一个重要的功能是:
执行了协处理器指令。Cortex-M3 本身并不支持协处理器,但是通过 fault 异常机制,可以建立一套“软件模拟”的机制,来执行一段程序模拟协处理器的功能
其余功能以及使能除能啥的情况和存储器 faults 基本一致,在这里不做过多介绍
导致用法 faults 最常见的原因是:视图切入 ARM 状态
SVC 与 PendSV
OS 不允许用户直接操作硬件,故出现了对应的桥梁 SVC(系统服务调用)
SVC 可以这样定义:
操作系统提供系统服务函数,用户通过 SVC 对这些函数发出请求,并以此来间接控制硬件
SVC 异常可以通过执行 SVC 指令来产生;
SVC 指令需要一个立即数,充当系统调用代号
PendSV 和 SVC 作用一致,只不过他可以被挂起
PendSV 异常处理程序通常会保存当前任务的上下文,并加载下一个任务的上下文,从而实现任务切换
PendSV 的任务优先级较低,故可以被许多高优先级例程打断
相关文章:
【Cortex-M3权威指南】学习笔记4 - 异常
目录 实现 CM3流水线CM3 详细框图CM3 总线接口总线连接模板 异常异常类型优先级定义优先级组 向量表中断输入于挂起NMI中断挂起 Fault 类异常总线 faults存储器管理 faults用法 faults SVC 与 PendSV 实现 CM3 流水线 CM3 处理器使用 3 级流水线,分别是:…...
RISC-V(2)——特权级及特权指令集
目录 1. 特权级 2. 控制和状态寄存器(CSR) 2.1 分类 2.2 分析 1. 特权级 一个 RISC-V 硬件线程(hart)是运行在某个特权级上的,这个特权级被编码到一个或者多个 CSR(control and status register&a…...
Linux——常用命令大汇总(带你快速入门Linux)
纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.终端和shell命令解析器终端和shell命令解析器概述终端提示符的格式常用快捷键 二.Linux命令格式帮助文档:man 三.目录基础知识Wind…...
记录 使用 git 克隆仓库报错:Warning: Permanently added‘github.com’ to the .....(ssh )
解决方法: 1. 新建空文件夹->右键->点击 Git Bash Here2. 输入 cd C:3. 输入 cat ~/.ssh/id_rsa.pub4. 输入 ssh-keygen重复回车,生成一个矩形,则说明公钥已经生成了。重复步骤3,生成publickey,右键…...
kafka---- zookeeper集群搭建
1.准备工作: ##准备3个节点,要求配置好主机名称,服务器之间系统时间保持一致 ##注意/etc/hostname 和/etc/hosts 配置主机名称(在这个里我准备Prac-zk-133, Prac-zk-134 , Prac-zk-135二节点) vim /etc/hosts #保证可以通过主机名互通 添加格式为IP 主…...
linux安装firefox
1.下载对应包 https://www.mozilla.org/en-US/firefox/all/#product-desktop-release 2. 挂载桌面链接(如果/usr/bin/firefox下有的话,先删除) ln -s /opt/firefox/firefox /usr/bin/firefox 3.执行以下命令,即可启动Firefox客户端: firefox...
【MySQL】基础语法总结
MySQL 基础语句 一、DDL 数据库定义语言 1.1CREATE 创建 1.1.1 创建数据库 语法结构 CREATE DATABASE database_name;示例 CREATE DATABASE demo;1.1.2 创建表 语法结构 CREATE TABLE 表名 (列1 数据类型,列2 数据类型,... );示例 CREATE TABLE new_user (id INT PRIMARY KE…...
【玩玩Vue】使用el-menu作为菜单时,通过一二级路由控制菜单高亮
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Vue路由二、路由一级控制高亮(常用)1.vue中路由文件2.网址样式3.Vue文件4.$route的内容 三、路由二级控制高亮…...
9.2 【C语言】使用结构体数组
一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据),如果有10个学生需要参加运算,显然应该用数组,这就是结构体数组。 9.2.1 定义结构体数组 例9.3 有三个候选人,每个选民只…...
leetcode原题: 最小值、最大数字
题目1:最小值 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出:3&…...
Prompt2Model: Generating Deployable Models from Natural Language Instructions
本文是LLM系列文章,针对《 Prompt2Model: Generating Deployable Models from Natural Language Instructions》的翻译。 Prompt2Model:从自然语言指令生成可部署模型 摘要1 引言2 Prompt2Model框架3 参考实现4 实验设置5 实验结果6 讨论与结论不足道德…...
前端埋点 sendBeacon 替代方式
看英文文档真的很重要 sendBeacon 限制比较多, 容易跨域, 跨域时候还必须指定请求头, 不能使用通配符来解决跨域 文档地址 文档里面说 fetch 其实可以代替 sendBeacon 原文: Note: For use cases that need the ability to send requests with methods other than POST, or …...
面试官问我MySQL和MariaDB的联系和区别,这我能不知道?
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…...
1.网络空间搜素引擎
网络空间搜素引擎 https://cybermap.kaspersky.com/cn 世界所以带有ip的网络设备互联组成的空间叫做网络空间 地址 :shodan.io 简介 : 这句话还是有点东西得 。 区别: 平常得搜素引擎主要搜网页,shadan可以搜所以带有ip地址…...
《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌全栈环境IDX,微软在Excel推出Python
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1ju4y1D7A8/ 《安富莱嵌入式周报》第321期:开源12导…...
前端开发必备的网站
前端开发必备的网站及官网 说明: 这里记录了我本人平时开发所用到的网站,对我还是有帮助的,后续会接着补充进来,一方面是为了记录,另一方面也可以帮助到大家… 网站名称及描述网址Elememt-ui (组件库)Elememt-ui&…...
Java运行时jar时终端输出的中文日志是乱码
运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可 两种方式修改:临时修改和注册表永久修改 临时修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK, 打开cmd&am…...
Vue框架--Vue中el和data的两种写法
data与el的2种写法 1.el有2种写法 (1).new Vue时候配置el属性。 (2).先创建Vue实例,随后再通过vm.$mount(#root)指定el的值。 2.data有2种写法 (1).对象式 (2).函数式 如何选择:目前哪种写法都可以,以后学习到组件时ÿ…...
【数据结构】 二叉树面试题讲解->贰
文章目录 🌏引言🎄[二叉树遍历](https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking)🐱👤题目描述&#…...
C和SystemVerilog联合仿真
想要联合仿真一个c程序和verilog表示的硬件,可以用如下方法(DPI): 先写一个.c文件funcs.c #include <stdio.h> #include "svdpi.h"extern int sayHello();void something() {printf("something\n");s…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
