STM32八股【2】-----ARM架构

news2025/3/25 23:12:42

1、架构包含哪几部分内容

  • 寄存器
  • 处理模式
  • 流水线
  • MMU
  • 指令集
  • 中断
  • FPU
  • 总线架构

2、以STM32为例进行介绍

2.1 寄存器

寄存器名称作用
R0-R3通用寄存器用于数据传递、计算及函数参数传递;R0 也用于存储函数返回值。
R4-R12通用寄存器用于存储局部变量,减少频繁的内存访问。
R13栈指针 (SP)指向当前栈顶,负责管理栈操作。分为主栈指针 (MSP)进程栈指针 (PSP):系统中断处理和普通任务可以使用不同的栈。栈指针用于管理栈的操作,包括函数调用时保存现场和中断处理时保存寄存器状态。
R14链接寄存器 (LR)保存函数调用返回的地址,函数返回时恢复程序执行。
R15程序计数器 (PC)指向当前执行的指令地址,控制程序执行的流程。
xPSR程序状态寄存器包含条件标志 (N, Z, C, V) 以及处理器状态 (T 位用于 Thumb 指令集)。
CONTROL控制寄存器控制处理器工作模式,如栈指针选择 (MSP/PSP) 和权限级别 (特权级/用户级)。
PRIMASK中断屏蔽寄存器屏蔽所有可屏蔽中断,保证关键代码段不被中断打断。
BASEPRI基础优先级寄存器设置中断优先级屏蔽阈值,低于该阈值的中断会被屏蔽。
FAULTMASK故障屏蔽寄存器屏蔽所有异常,包括硬件故障,通常用于系统恢复或严重故障时。

分类记忆:
通用寄存器:R0-R12
R0-R3:用于数据传递、计算及函数参数传递;R0 也用于存储函数返回值。
R4-R12:用于存储局部变量,减少频繁的内存访问。
特殊功能寄存器
R13(栈指针 SP):指向当前栈顶,管理栈操作。
R14(链接寄存器 LR):保存函数调用返回地址。
R15(程序计数器 PC):指向当前执行的指令地址,控制程序流程。
状态和控制寄存器
xPSR(程序状态寄存器):包含条件标志和处理器状态。
CONTROL(控制寄存器):控制处理器工作模式。
PRIMASK、BASEPRI、FAULTMASK:用于中断和故障管理。

2.2 处理模式

stm32默认普通程序和中断程序都工作在特权级。

  • 处理者模式
    • 始终运行在特权级
  • 线程模式
    • 可以运行在特权级和非特权级,通过CONTROL寄存器控制。

2.3 流水线

  • 概念
    MCU的流水线,指的是在指令执行过程中将一条指令的不同阶段拆分成多个步骤,让这些步骤可以并行执行,从而提高指令吞吐量。

  • 一个典型的 ARM 处理器指令流水线包括以下阶段:

    • 取指(Fetch):从内存中获取指令。
    • 译码(Decode):将指令翻译成处理器可以理解的操作。
    • 执行(Execute):执行指令,如加法、乘法、位移等操作。
    • 存储(Memory Access):如果需要,进行内存访问,读取或写入数据。
  • ARM 处理器的流水线可以有多个阶段,常见的有 3 级、5 级或 7 级流水线,甚至更深的流水线设计。

2.4 MMU

MMU定义:Arm MMU深度解读

  • ARM 处理器中的 MMU(Memory Management Unit,内存管理单元) 用于支持虚拟内存和内存保护。

  • 它通过将虚拟地址转换为物理地址,并设置内存访问权限,确保操作系统和应用程序的内存安全。MMU 是多任务操作系统(如 Linux)运行的关键。

    • 虚拟内存:MMU 支持将程序的地址空间映射到物理内存中,使得不同的任务可以使用不同的虚拟地址空间。
    • 内存保护:通过 MMU,操作系统可以保护内存空间,防止进程间非法访问。
  • 对于一些低端 ARM Cortex-M 系列(如 Cortex-M0),没有内置 MMU,而是使用 MPU(Memory Protection Unit) 进行简单的内存保护,而不支持完整的虚拟内存。

2.5 指令集

ARM 处理器的指令集架构基于 RISC 设计原则,使用精简指令集。常见的 ARM 指令集架构有:

  • ARM 指令集:用于标准 32 位指令集的 ARM 处理器,支持更复杂的运算和操作。
  • Thumb 指令集:是 ARM 的一种压缩指令集,指令长度为 16 位,旨在减少内存占用,适用于资源受限的嵌入式系统。Thumb 指令集的执行效率虽然略低,但通过减少代码大小提高了存储效率。
  • Thumb-2 指令集:结合了 32 位 ARM 指令和 16 位 Thumb 指令,使得处理器能够在运行时动态切换不同指令集,提供更高的性能和代码密度。

2.6 中断

ARM 处理器具有复杂的中断和异常处理机制,其中NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器) 是 Cortex-M 系列中的重要模块,用于管理中断。

  • 中断优先级:ARM Cortex-M 支持多级中断优先级,可以快速响应高优先级中断。
  • 中断嵌套:允许高优先级中断在低优先级中断的处理中打断执行,实现中断的嵌套。

在发生中断时,处理器会自动保存必要的寄存器,并跳转到对应的中断服务程序 (ISR) 执行,处理完后恢复执行原程序。

中断现场保存

2.7 FPU

在一些高性能的 ARM Cortex-M 处理器(如 Cortex-M4、Cortex-M7)中,集成了硬件浮点运算单元 (FPU),用于加速浮点数的运算。这对于涉及大量数学计算的应用(如信号处理、图像处理)非常有用。

  • 单精度浮点运算(FPU-S):支持 IEEE 754 标准的单精度浮点运算。
  • 双精度浮点运算(FPU-D):更高端的处理器支持双精度浮点运算。

2.8 总线架构

冯·诺依曼结构,也称统一存储结构,ARM 处理器通过各种总线架构连接外设、存储器和其他模块,常见的总线架构包括:

  • AHB (Advanced High-performance Bus):高性能总线,用于连接内存和高速外设。
  • APB (Advanced Peripheral Bus):低速外设总线,用于连接定时器、串口、GPIO 等外设。
  • AXI (Advanced eXtensible Interface):在高端 ARM 处理器中使用,支持高吞吐量和并发的外设访问。

回顾

  • stm32有哪些通用寄存器
  • stm32有哪些特殊功能寄存器
  • stm32有哪些状态和控制寄存器
  • 讲一下stm32的两种处理模式
  • 为什么要用虚拟地址?为什么要用MMU?
  • ARM常见的指令集架构有哪些
  • 介绍一下NVIC
  • 介绍一下stm32的总线架构

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

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

相关文章

智能汽车图像及视频处理方案,支持视频智能包装能力

美摄科技的智能汽车图像及视频处理方案,通过深度学习算法与先进的色彩管理技术,能够自动调整图像中的亮度、对比度、饱和度等关键参数,确保在各种光线条件下,图像都能呈现出最接近人眼的自然色彩与细节层次。这不仅提升了驾驶者的…

jenkins+1panel面板java运行环境自动化部署java项目

本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程,如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…

C语言 【实现电脑关机小游戏】非常好玩

引言 在时间限制内做出正确的回答,时间一到,电脑自动关机,听起来是不是很有意思,下面来看看怎么实现吧。 注意:该游戏只在windows系统下可以玩, 一、游戏原理: 在Windows系统下,通…

[网络安全] 滥用Azure内置Contributor角色横向移动至Azure VM

本文来源于团队的超辉老师,其系统分析了Azure RBAC角色模型及其在权限滥用场景下的攻击路径。通过利用AADInternals工具提升用户至Contributor角色,攻击者可在Azure VM中远程执行命令,创建后门账户,实现横向移动。文中详述了攻击步…

vue3,element-plus 表格单选、多选、反选、全选

准备 定义数据 // 表格 const table ref(); // 表格数据 import type { User } from "/interface"; const tableData ref<User[]>([]); // 表格选集 const tableSelection ref<User[]>([]); // 表格选择行 const tableSelectedRow ref<User>…

【Linux】从开发到系统管理深入理解环境变量

文章目录 前言一、环境变量概念1.1 为什么需要环境变量&#xff1f;1.2 环境变量的本质特征 二、环境变量PATH2.1 PATH的运作机制2.2 常见环境变量及其作用2.3 环境变量操作指南 三、再谈环境变量3.1main函数命令行参数解析3.2 环境变量的继承机制3.3 本地变量与内部构建命令 总…

【CGE】社会核算矩阵构建(一):SAM基本结构

【CGE】社会核算矩阵构建&#xff08;一&#xff09;&#xff1a;SAM基本结构 社会核算矩阵构建&#xff08;一&#xff09;&#xff1a;SAM基本结构一、SAM的概念和基本特点二、SAM的基本结构1.开放经济体的SAM表结构2.SAM表各账户的主要核算内容&#xff08;1&#xff09;社会…

Ubuntu 系统部署 Ollama + DeepSeek + Docker + Ragflow

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; Mysql数据库规范 一、Ol…

第三讲 | C/C++内存管理完全手册

C/C内存管理 一、 C/C内存分布二、 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、 C内存管理方式1. new/delete操作内置类型2. new和delete操作自定义类型 四、operator new和operator delete函数&#xff08;重点&#xff09;五、new和delete的实现原理…

2021年蓝桥杯第十二届CC++大学B组真题及代码

目录 1A&#xff1a;空间&#xff08;填空5分_单位转换&#xff09; 2B&#xff1a;卡片&#xff08;填空5分_模拟&#xff09; 3C&#xff1a;直线&#xff08;填空10分_数学排序&#xff09; 4D&#xff1a;货物摆放&#xff08;填空10分_质因数&#xff09; 5E&#xf…

秒杀业务优化之从分布式锁到基于消息队列的异步秒杀

一、业务场景介绍 优惠券、门票等限时抢购常常出现在各类应用中&#xff0c;这样的业务一般为了引流宣传而降低利润&#xff0c;所以一旦出现问题将造成较大损失&#xff0c;那么在业务中就要求我们对这类型商品严格限时、限量、每位用户限一次、准确无误的创建订单&#xff0c…

纯vue手写流程组件

前言 网上有很多的vue的流程组件&#xff0c;但是本人不喜欢很多冗余的代码&#xff0c;喜欢动手敲代码&#xff1b;刚开始写的时候&#xff0c;确实没法下笔&#xff0c;最后一层一层剥离&#xff0c;总算实现了&#xff1b;大家可以参考我写的代码&#xff0c;可以拿过去定制…

WPS宏开发手册——使用、工程、模块介绍

目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题&#xff0c;持续更新中… 前言 如果你是开发人员&#xff0c;那么wps宏开发对你来说手拿把切。反之还挺吃力&#xff0c;需要嘻嘻&#xf…

django入门教程之request和reponse【二】

接上节&#xff1a;入门【一】 再创建一个orders子应用&#xff0c;python manager.py startapp orders&#xff0c;orders目录中新建一个urls.py文件。结构如图&#xff1a; 通过上节课&#xff0c;我们知道在views.py文件中编写函数时&#xff0c;有一个默认入参request&…

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

【Linux】VMware17 安装 Ubuntu24.04 虚拟机

目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址&#xff1a;ubuntu-24.04.2-des…

WPS宏开发手册——JSA语法

目录 系列文章2、JSA语法2.1、打印输出2.2、注释2.3、变量2.4、数据类型2.5、函数2.6、运算符2.7、比较2.8、if else条件语句2.9、for循环2.10、Math对象&#xff08;数字常用方法&#xff09;2.11、字符串常用方法2.12、数组常用方法 系列文章 使用、工程、模块介绍 JSA语…

word中指定页面开始添加页码

第一步&#xff1a; 插入页码 第二步&#xff1a; 把光标放到指定起始页码处 第三步&#xff1a; 取消链接到前一节 此时关掉页脚先添加分节符 添加完分节符后恢复点击 第四步&#xff1a; 设置页码格式&#xff0c;从1开始 第五步&#xff1a; 删掉不要的页码&#xff0c…

Python实现deepseek接口的调用

简介&#xff1a;DeepSeek 是一个强大的大语言模型&#xff0c;提供 API 接口供开发者调用。在 Python 中&#xff0c;可以使用 requests 或 httpx 库向 DeepSeek API 发送请求&#xff0c;实现文本生成、代码补全&#xff0c;知识问答等功能。本文将介绍如何在 Python 中调用 …

文档处理控件Aspose.Words 教程:.NET版中增强的 AI 文档摘要功能

Aspose.Words是一个功能强大的 Word 文档处理库。它可以帮助开发人员自动编辑、转换和处理文档。 自 24.11 版以来&#xff0c;Aspose.Words for .NET 提供了 AI 驱动的文档摘要功能&#xff0c;使用户能够从冗长的文本中快速提取关键见解。在 25.2 版中&#xff0c;我们通过使…