ARM Cortex-M3/M4初学习(未完待续)
ARM Cortex-M3/M4初学习
0. 架构与核心特性
0.1 指令集架构
- 基于ARMv7-M架构,支持Thumb-2指令集(混合16/32位指令集)
- 基于哈佛架构,数据和指令分布存储在独立的空间中
0.2 流水线
- 三级流水线: 取值(Fetch) - 译码(Decode) - 执行(Execute)
- 这种结构在简化设计和降低功耗的同时,仍然能够提供足够的处理能力。
0.3 总线结构
- I-bus(Instruction Bus,指令总线):
用于从代码存储器(如 Flash 或 ROM)中读取指令。
- D-bus(Data Bus,数据总线):
用于从内存(如 SRAM)或外设寄存器中读写数据。
- S-bus(System Bus,系统总线):
用于访问 内存映射的外设、系统控制块(SCB) 和 调试接口。
- DMA:(不一定存在)stm32f1,f4系列均有,一般每个DMA有8个 stream 流,其中f4系列的DMA具有FIFO
1. 寄存器组

| 寄存器 | 说明 | 分组 |
|---|---|---|
| R0 | 通用寄存器 | Low Registers |
| R1 | 通用寄存器 | Low Registers |
| R2 | 通用寄存器 | Low Registers |
| R3 | 通用寄存器 | Low Registers |
| R4 | 通用寄存器 | Low Registers |
| R5 | 通用寄存器 | Low Registers |
| R6 | 通用寄存器 | Low Registers |
| R7 | 通用寄存器 | Low Registers |
| R8 | 通用寄存器 | High Registers |
| R9 | 通用寄存器 | High Registers |
| R10 | 通用寄存器 | High Registers |
| R11 | 通用寄存器 | High Registers |
| R12 | 通用寄存器 | High Registers |
| R13 | 主堆栈指针 (MSP) ,R13 (PSP) 为进程堆栈指针 (PSP) | - |
| R14 | 连接寄存器 (LR) | - |
| R15 | 程序计数器 (PC) | - |
1.1 通用寄存器:R0-R12(共13个)
- 低组寄存器(Low Registers):
R0-R7 为低组寄存器,所有指令都可以访问(共8个)
- 高组寄存器(High Registers):
R8-R12为高组寄存器,只有32位Thumb指令和很少的16位Thumb指令能访问(共5个)
1.2 堆栈指针:SP(R13)
cm3/cm4内核有两个SP,分别是MSP(主堆栈指针)和PSP(进程堆栈指针),共用寄存器地址
主 堆栈指针(MSP):
用于 特权模式(Handler Mode) 和 异常 / 中断处理。
由硬件自动切换,例如进入中断服务程序(ISR)时,处理器强制使用 MSP。
裸机默认只使用MSP
进程堆栈指针(PSP):
- 用于 用户模式(Thread Mode),通常运行应用程序或用户任务。
- 需手动配置,适用于多任务系统中不同任务的堆栈隔离。
- 常用于RTOS中
示例:FreeRTOS中是怎么使用MSP和PSP的
场景 使用的堆栈指针 说明 系统启动 MSP 默认模式,初始化阶段使用 用户任务运行 PSP 每个任务独立堆栈,由调度器管理 中断 / 异常处理 MSP 保证内核稳定性,隔离任务堆栈 任务切换(PendSV) PSP → MSP → PSP 保存旧任务 PSP,加载新任务 PSP 特权 API 调用 PSP(短暂切换) 通过 SVC 或直接寄存器操作
1.3 链接寄存器:LR
- 连接调用子程序(中断or异常or函数)时存储的返回地址
- 可以用于栈回溯调试
1.4 程序计数器:PC
- 指向当前程序运行的指令的地址
1.5 程序状态寄存器:xPSR
等我有时间学一下
2. 寄存器用途
- R0 到 R3:前4个函数参数使用R0-R4传参,超出部分通过堆栈传递
- R4 到 R11:局部变量,保存上下文,被调用者保存的寄存器。
- R12:临时寄存器,调用者保存的寄存器。
- SP:栈指针。
- LR:链接寄存器,用于保存返回地址。
- PC:程序计数器。
3. 堆栈
这里讨论的C语言中的堆栈,不是RTOS中的堆栈
堆栈的空间均分配在RAM中,一般可以通过修改启动文件来修改栈的大小
3.1 堆
- cm3/cm4中堆向上生长
- 由程序员分配,效率低
3.2 栈
栈一般是函数调用中会使用,所以过度递归会导致爆栈
由程序自动分配,效率高
cm3/cm4中栈向上生长
栈的最大调用深度可以通过MDK生成的htm文件查看(估计值)
KEIL MDK .map文件分析(必学知识点) - 正点原子倾力打造!-OpenEdv-开源电子网
4. CM3与CM4的区别
| 特性 | Cortex-M3 | Cortex-M4 |
|---|---|---|
| 指令集 | Thumb-2(支持部分 16/32 位指令) | Thumb-2 + DSP 扩展指令集 |
| 浮点单元(FPU) | 不支持 | 可选单精度 FPU(IEEE 754) |
| DSP 指令 | 无 | 支持乘加(MAC)、SIMD、饱和运算 |
| 硬件除法器 | 支持(32 位除法的周期数更多) | 优化除法周期(部分型号) |
5. 什么是哈佛架构?
- 定义:将程序指令和数据存储在两个独立的内存中的体系结构。
- 特点:
- 分离存储器:指令和数据各自有独立的存储空间。
- 独立总线:使用分开的总线分别传输指令和数据,允许同时访问指令和数据(并行)。
- 提高性能:通过并行访问指令和数据,增强系统的处理速度。
- 硬件复杂:需要两个独立的存储器和总线,硬件复杂性较高
参考链接
《嵌入式软件的时间分析》Cortex-M3的三级流水线与分支预测【阅读笔记3】 - 汽车电子 - 电子工程世界-论坛
ARM Cortex-M3/M4初学习(未完待续)的更多相关文章
- 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...
- springcloud-netflix组件学习-未完待续!!!
SpringCloud学习 Spring Cloud是什么鬼? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现 ...
- 浅析Oracle PL/SQL 学习--未完待续
这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...
- 【tomcat】sessionId学习(未完待续)
这里主要研究tomcat中session的管理方式以及sessionId的原理,下文将研究sessionid存到redis中以及基于redis实现session共享. 平时也就是了解session是基 ...
- 可持久化Treap(fhq Treap,非旋转式Treap)学习(未完待续)
简介: Treap,一种表现优异的BST 优势: 其较于AVL.红黑树实现简单,浅显易懂 较于Splay常数小,通常用于树套BST表现远远优于Splay 或许有人想说S ...
- jmeter 工具学习 未完待续
about Apache JMeter是Apache组织的开源项目,是 一个纯Java桌面应用,用于压力测试和性能测试,它最初被设计用于 web应用测试,后来逐渐的扩展到其他领域 jmeter可以用于 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...
- 初进MFC的世界,太奇妙。第六次作业----未完待续
又一次的迁徙.我希望能够早些抵达. 第六次作业-未完待续!图形界面,计算器文件 本次的作业是给自己的计算器加一个可视化的窗口,我开始也是很激动和憧憬的,看了很多的界面库,发现并没有想象的那么简单,因为 ...
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...
随机推荐
- 解决多个if-else的方案
参考链接: 遇到大量if记住下面的口诀: 互斥条件表驱动 嵌套条件校验链 短路条件早return 零散条件可组合 解释: 互斥条件,表示几个条件之间是冲突的,不可能同时达成的.比如说一个数字,它不可能 ...
- Vue(六)——条件渲染
Vue--条件渲染 v-if.v-else-if.v-else v-if 指令用于条件性地渲染一块内容,表达式的值为 true --渲染. false--不渲染 v-if.v-else-if.v-el ...
- 详解SLAM中的李群和李代数(上)
1 概述 最近阅读高翔大神的<视觉SLAM十四讲>这本书,感觉整本书写的非常的平实,用非常接地气的语言毫无保留的介绍了视觉SLAM的相关知识,非常值得一读.不过,在第4章出现的李群和李代数 ...
- heapdump敏感信息提取工具-heapdump_tool(二),附下载链接。
heapdump敏感信息查询工具,例如查找 spring heapdump中的密码明文,AK,SK等 下载链接: heapdump_tool下载链接:heapdump_tool下载 声明: 此工具 ...
- 【笔记】reko 0.10.2 反编译工具安装和使用记录|(1) README.md
(翻译自README.md,并通过自己的实际操作情况重新整理了一遍) 笔者注:我已经成功地根据README.md下载了Release版本,也自己试了下从源码编译,跟着README都挺顺利的.如果操作过 ...
- 挑战零基础用CodeBuddy做一款音视频处理软件
朋友们,我最近不是一直在捣鼓小软件嘛!手头这个叫TransDuck的音视频处理工具刚有点小爆的趋势,反馈意见里也是收到不少关于SaaS版本的问题,比如: "翻译效果真的顶!但每次上传比较大的 ...
- 将Spring Boot项目部署到自己的服务器上
第一步: 先准备好MobaXterm,链接上服务器后进入宝塔面板 https://www.bt.cn/new/download.html 找到Linux面板安装脚本复制命令 第二步: 进入MobaXt ...
- Median of Two Sorted Arrays---LeetCode进阶路④
题目描述 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...
- 如何实现RAG与MCP集成
1.概述 在人工智能的创新浪潮中,检索增强生成(RAG)技术以其高效调用外部知识.提升生成内容准确性的能力备受瞩目,而模型上下文协议(MCP)则为不同模型间的交互与协同提供了标准框架.当 RAG 的知 ...
- linux服务器常用硬件查询操作
查看服务器内存条数 [root@test ~]# dmidecode |grep -P -A5 "Memory\s+Device" |grep Size |grep -v Rang ...