STM32F407学习记录(七)Cortex-M3/M4权威指南:第三章
前言本文章相当于学习笔记摘录总结。推荐自行观看相关书籍权威指南不足之处请指点。3.1Cortex--M3和Cortex-M4处理器的一般信息3.1.1处理器类型ARM Cortex-M为32位RISC精简指令集处理器其具有32位处理器、32位内部数据通路、32位总线接口。Coretx-M处理器还可以高效处理8位和16位数据。Cortex-M3/M4处理器还支持涉及64位数据的多种运算。Cortex-M3/M4都具有三级流水线取指、译码和执行它们都基于哈佛总线架构取指令和数据访问可以同时执行。三级流水线在执行第一条指令的同时解析第二条指令读取第三条指令。哈佛总线架构CPU内部物理上有两条独立的总线通道。取指令和数据访问同时进行取指单元走指令总线去Flash闪存取指令同时执行单元走数据总线去SRAM静态随机存取存储器读数据。存储器系统使用32位寻址地址空间最大为4GB。存储器空间包括程序代码、数据、外设以及处理器内的调试支持部件。Cortex-M处理器基于一种加载-存储架构。例如要增加SRAM中存储的数据值。处理器第一条指令从SRAM中读出数据并将数据放在处理器的寄存器中第二条指令增加寄存器中的数据值第三条指令将数据写回SRAM。处理器内部的寄存器细节一般被称为编程模型。编程模型特指在编写汇编语言或底层C语言时程序员需要关心的、可见的所有寄存器和操作规则的总和。举个例子在编程模型里你根本看不到“取指”“译码”这些阶段也看不到“指令总线”和“数据总线”。你在代码里写LDR R0, [R1]读内存编程模型告诉你“读完了数据放进R0里”至于CPU是靠哈佛总线同时取指取数还是靠冯诺依曼排队取只要最终结果正确编程模型丝毫不会改变。3.1.2处理器架构对于ARM处理器架构一般指两个方面1架构。指令集架构ISA、编程模型、调试方法。2微架构。接口信号、指令执行时序以及流水线阶段等实现相关的细节微架构与处理器设计相关。1个指令集架构可以包含多个微架构设计如不同数量的流水线阶段和不同类型的总线接口。3.1.3指令集Cortex-M处理器使用的指令集名为Thumb(包含16位的Thumb指令和更新的32位Thumb指令)。Cortex-M3/M4处理器用到了Thumb-2技术它允许16位和32位指令混合使用。ARM7TDMI等经典的ARM处理器有两种操作状态132位的ARM状态可以执行32位ARM指令进行复杂的操作。216位的Thumb状态可以得到很好的代码密度。处于Thumb状态如果需要处理复杂操作就要切换到ARM状态这就会带来状态切换的开销。Thumb-2技术的引入处理器可以直接执行16位和32位的Thumb指令。事实上Cortex-M处理器不支持ARM指令它只有16位和32位的Thumb指令。经典的ARM处理器在中断处理时是一定会进入ARM状态的。Thumb-2的优势1无状态切换开销节省执行时间和指令空间。2无须指定源文件中的ARM状态或Thumb状态开发软件也更容易3在获得最佳代码密度和效率的同时还能很容易地达到高性能。不同处理器的Thumb指令集的子集也不同。3.1.4模块框图3.1.5存储器系统Cortex-M3/M4处理器本身不包含存储器没有程序存储器、SRAM或缓存它具有通用的片上总线接口。微控制器商通过这个接口将存储器系统集成到系统中。3.1.6中断和异常支持Cortex-M3/M4处理器中有一个名为“嵌套向量中断控制器NVIC”,可编程且其寄存器经过了存储器映射。NVIC的地址固定且编程模型对于所有Cortex-M处理器一致。NVIC除了外设和其他外部输入的中断外还支持多个系统异常其中包括不可屏蔽中断NMI和处理器内部的其他异常源。微控制器供应商能够决定NVIC设计实际支持的可编程中断优先级的数量。3.2Cortex-M3和Cortex-M4处理器的特性3.2.1性能三级流水线结构并且运行频率一般可以超过100Mhz。多总线接口指令和数据访问可以同时执行。流水线结构的总线接口使得存储器系统可以运行较高的时钟频率。指令集高效执行复杂运算可以使用较少的指令。每次取指令都是32位的但是多数指令是16位的因此可以一次取两条指令。3.2.2代码密度高代码密度3.2.3低功耗处理器中存在一个名为唤醒中断控制器WIC的可选硬件单元3.2.4存储器系统可寻址存储器空间共为4GB且以32位寻址无须将存储器分页。所有的Cortex-M处理器的存储器映射定义都是一致的预定义的存储器映射使得处理器设计可以为哈佛总线架构进行优化而且访问处理器内经过存储器映射的外设如NVIC也非常容易。流水线结构的AHB Lite总线接口可以提供高速且低等待的传输AHB Lite接口支持32位、16位和8位数据的高效传输。总线协议还允许插入等待状态、支持总线错误条件及允许多个总线主控共用总线。可选的位段特性。SRAM和外设空间中存在两个可位寻址的区域通过位段别名地址修改的位数值会被自动转换为位段区域的读---修改---写的原子操作参考6.7节。多处理器系统设计的排他访问使用于多处理器系统中的信号量操作。支持小端或大端的存储器系统。Cortex-M3/M4处理器既可以运行在小端模式也可以运行在大端模式。可选的存储器保护单元。3.2.5存储器保护单元MPU为Cortex-M3/M4处理器中的可选特性微控制器厂商可以决定是否使用MPU。作用监控总线传输的可编程设备需要通过软件配置。有MPU应用程序可以将存储器空间分为多个部分并设置访问权限。违反规则产生异常错误。应用场景保护OS内核和其他特权任务使用的数据防止被破坏。可以选择将不同用户任务的存储器隔离开。将系统配置为只读防止意外擦除SRAM中的数据或覆盖指令代码。MPU默认禁止。3.2.6中断处理嵌套向量中断控制器NVIC支持最多240个中断输入、不可屏蔽中断NMI输入和多个系统异常。每个中断NMI除外都可以被单独使能或者禁止。中断和多个系统异常具有可编程的优先级。对于Cortex-M3/M4优先级可以在运行是动态修改Cortex-M0/M0不行。嵌套中断/异常以及中断/异常按照优先级自动处理。向量中断/异常。处理器会自动取出中断/异常向量无需软件确定产生的是哪个中断/异常。向量表可以重定位。中断/异常可以屏蔽。向量表系统存储器的一部分其中存有中断和系统异常的起始地址。向量表默认位于存储器空间的开头若需要可以重定向至其他位置。Cortex-M3/M4设备实际支持的中断数量由微控制器供应商设置。3.2.7OS支持和系统级特性Cortex-M3/M4支持嵌入式OS内部具有一个系统节拍器SysTick,可以为OS定时提供周期性定时中断。Cortex-M3/M4具有两个栈指针OS内核和中断用的主栈指针MSP和任务用的进程栈指针PSP。OS内核和应用任务栈分离开提高可靠性。裸机开发可以只使用MSP。Cortex-M3/M4支持独立的特权和非特权操作模式启动后默认处于特权模式。应用场景当使用OS执行用户任务时任务可以在非特权模式执行可以限制行为比如访问NVIC寄存器。再加上MPU可以防止非特权任务访问某些重要的存储器区域破坏OS内核和数据。Cortex-M处理器具有一些错误处理当检测到错误访问非法存储器地址错误异常被触发。3.2.8Cortex-M4的特殊特性DSP扩展8位和16位单指令多数据SIMD指令。这些指令允许多个数据操作并行执行主要用在音频处理左右声道的计算可以同时执行。支持多个饱和运算指令。单周期16位、双16位以及32位乘累加MAC。可选的浮点单元FPU符合IEEE754标准的单精度浮点单元。浮点单元支持融合MAC运算可以提高MAC结果精度。不需要浮点单元可以关闭降低功耗。为了发挥DSP的作用ARM提供了一个CMSIS-DSP库。3.2.9易于使用一般情况下C语言就够了。3.2.10调试支持Flash补丁和断点单元FPB通过“指令比较器”当FPB捕获到对某个Flash地址如一个有Bug的函数的访问时它不是触发断点而是将访问重定向到RAM或Flash中另一段准备好的、正确的代码。这个功能特别适合用于修复已部署产品中无法重新烧录的Flash或ROM里的Bug。开发者可以将补丁代码放入RAM然后配置FPB完成“偷梁换柱”。通过调试器设置FPB的“指令比较器”让其监视CPU发出的特定Flash地址。当CPU要执行该地址的指令时FPB会“中途拦截”并返回一条BKPT断点指令。CPU执行该指令便会触发断点暂停运行将控制权交给调试器。数据监视点和跟踪单元DWT:DWT内部有4个比较器你可以配置它们去监视特定的内存地址。一旦CPU对该地址进行读、写或执行操作DWT就可以触发预定义的动作例如产生一个硬件观察点调试事件让CPU进入调试模式停机或进入调试监视器。触发ETM嵌入式跟踪宏单元产生一个跟踪数据包。应用场景这在调试数据异常时非常有用。例如你可以监视一个关键全局变量一旦它被意外修改CPU会立即停下方便你定位问题。DWT可以生成各种硬件事件跟踪包并通过系统的跟踪接口如TPIU输出供调试器或分析工具捕获和解码。集成开发环境(IDE)中的调试器可以将数据值和其他信息呈现出来并将数据值的改变图像化。DWT可用于产生异常事件跟踪和基本概况信息也通过跟踪接口输出。3.2.11可扩展性支持多处理器系统排他访问指令。在多核系统中如果两个核心同时修改同一个变量比如对一个全局计数器执行1操作可能会因为“读-改-写”操作被打断导致最终结果错误。通过总线架构中增加的硬件支持处理器可以确定对一个共享数据存储器区域的访问是否成功执行(例如在操作期间没有其他的处理器访问同一区域)。可扩展的调试支持。多个处理器可共享一个调试连接和跟踪接口。事件通信接口。在多处理器系统中可以让一些处理器进人休眠模式以降低功耗而在某个处理器中的信号量操作完成等事件发生时则可以将处理器唤醒。3.2.12兼容性其实就是不同处理器代码兼容只需稍微修改。

相关新闻

慧购 SmartPick|GPASS 百宝箱 AI 眼镜购物助手技术文档

慧购 SmartPick|GPASS 百宝箱 AI 眼镜购物助手技术文档

慧购(SmartPick):基于蚂蚁百宝箱的 AI 眼镜货架前决策助手赛事: GPASS AI 眼镜智能体开发者大赛 作品: 慧购(SmartPick) 开发平台: 蚂蚁百宝箱(TBox)企业版工…

2026/7/17 5:00:24阅读更多 →
VLA面试核心:感知-语言-动作三层认知与工程落地

VLA面试核心:感知-语言-动作三层认知与工程落地

1. 这不是“背题手册”,而是VLA面试者必须建立的认知坐标系“VLA大模型 面试指南导读”——看到这个标题,很多人第一反应是:又一份知识点罗列清单?又一套高频题库合集?我实话讲,如果你真这么想,…

2026/7/17 5:00:24阅读更多 →
C++单例模式实现线程安全错误日志系统:从原理到工程实践

C++单例模式实现线程安全错误日志系统:从原理到工程实践

1. 项目概述:为什么错误日志需要单例模式?在任何一个有一定规模的C项目中,错误日志系统都扮演着“黑匣子”的角色。它默默记录着程序运行时的每一个异常、每一次警告,是开发者在线上问题排查、性能分析甚至安全审计时最可靠的伙伴…

2026/7/17 5:00:24阅读更多 →
C++多线程编程:深入理解std::thread::join()原理与Windows实践

C++多线程编程:深入理解std::thread::join()原理与Windows实践

1. 项目概述:为什么我们需要join()?在 Windows 平台上用 C 搞多线程开发,std::thread的join()函数绝对是你绕不开的一个核心操作。乍一看,它就是个“等待线程结束”的函数,但如果你真把它想得这么简单,那在…

2026/7/17 6:00:30阅读更多 →
Archon项目:AI编程工程化的YAML工作流实践

Archon项目:AI编程工程化的YAML工作流实践

1. Archon项目概述:当AI编程遇上工程化思维第一次听说Archon这个项目时,我正被AI代码生成的随机性折磨得焦头烂额。作为每天要和AI编程工具打交道的开发者,我们都经历过这样的场景:让AI写个排序算法,第一次生成了快速排…

2026/7/17 6:00:30阅读更多 →
PCL KdTree原理与实战:点云最近邻搜索核心技术与性能优化

PCL KdTree原理与实战:点云最近邻搜索核心技术与性能优化

1. 项目概述 如果你正在用PCL(Point Cloud Library)处理点云数据,无论是做三维重建、自动驾驶感知,还是机器人导航,有一个工具你几乎无法绕开,那就是KdTree。它不像点云滤波、配准那样有直观的视觉效果&…

2026/7/17 6:00:30阅读更多 →
前端基础之《React(11)—state声明式》

前端基础之《React(11)—state声明式》

一、如何定义state1、在类组件中,在constructor()构造函数中使用this.state{}来定义2、在函数式组件中,自React16.8以后,可以使用useState()来定义二、如何使用state1、在类组件中,通过this.state来访问声明式变量import { Compon…

2026/7/17 6:00:29阅读更多 →
小学生C++竞赛学习路径规划:从零基础到获奖的四大阶段详解

小学生C++竞赛学习路径规划:从零基础到获奖的四大阶段详解

1. 项目概述:从“多久能获奖”到“如何有效学习”“小学生学C,一般大约多长时间能获奖?”——这大概是所有刚接触信息学竞赛的家长和孩子心中最直接、也最焦虑的问题。我接触过太多从零开始的孩子,也见过不少在赛场上崭露头角的“…

2026/7/17 6:00:29阅读更多 →
tokenspeed:用一串假 token,看懂 LLM 的“快“和“慢“

tokenspeed:用一串假 token,看懂 LLM 的“快“和“慢“

tokenspeed:用一串假 token,看懂 LLM 的"快"和"慢" 一个纯 Python 的终端小玩具,用假 token 模拟 LLM 的输出速度。没有实际模型,没有 API 调用,只是让你看看 30 tok/s 到底有多快、800 tok/s 又有…

2026/7/17 5:55:29阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/16 8:28:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/16 6:53:04阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/16 12:02:41阅读更多 →
VS Code 高效配置与个性化定制全攻略

VS Code 高效配置与个性化定制全攻略

1. VS Code 高效配置基础作为一款轻量级但功能强大的代码编辑器,VS Code 的默认配置已经能满足基本需求,但通过合理调整设置可以大幅提升编码效率。我使用 VS Code 已经有五年多时间,期间尝试过各种配置方案,总结出这套适合大多数…

2026/7/17 0:00:01阅读更多 →
从竞赛代码到桌面工具:让 SuperADD 与 SubspaceAD 真正跑进自己的图像

从竞赛代码到桌面工具:让 SuperADD 与 SubspaceAD 真正跑进自己的图像

在异常检测领域,很多优秀算法最初都是以研究代码的形式发布的。它们能够在固定测试集上复现实验结果,却不一定能被普通用户直接拿来测试自己的图片。尤其是最近很多算法仅提供在固定测试集的测试环境,而gradio的demo演示也不会提供。 对工程应用和在自己的图片上进行测试来…

2026/7/17 0:00:01阅读更多 →
WinRAR高效配置指南:从基础安装到高级压缩实战

WinRAR高效配置指南:从基础安装到高级压缩实战

前几天帮同事处理一个客户发来的压缩包,解压时系统自带的工具弹出一串乱码,换用 WinRAR 却顺利打开了。这种看似简单的场景,恰恰暴露了不同压缩工具在处理非标准编码、分卷压缩或加密文件时的差异。WinRAR 作为一款老牌工具,真正价…

2026/7/17 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/16 20:13:14阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/16 8:58:42阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/16 17:10:26阅读更多 →