STM32内核细讲《从CPU架构到操作系统实现》
1.1 概述章-CPU架构99%的手机50%的CPU都是基于ARM的。只卖架构知识产权IP里面有Cortex-A手机常用Cortex-R用的少Cortex-M低功耗内核架构设计指令集指令集ISA就是 CPU 能懂的全部单词的集合——软件用这些单词写程序CPU 按这些单词干活Cortex-M是Thumb指令集在上面跑ARM指令集会出问题。Thumb 是 ARM 指令集的压缩版——每条指令从 32 位缩到 16 位牺牲了部分功能但大幅节省 Flash 空间。Thumb-2 又加回了 32 位指令形成了现在的 16/32 位混合模式。STM32F103这次不讲外设的应用讲内核操作系统应用。M3核移植到M7核是省事的高版本兼容低版本2.1 编译章 编译工具链以前我们都是通过集成开发环境IDE进行一键编译会忽略很多细节。编译工具链常见ARM公司自研发的keil5收费GCCGNUSTM公司的cubeMXGNU 编译器套件你把 C 代码丢给它它产出机器码。C语言编译器有一个也叫gcc注意区分STM32CubeIDE叫集成开发环境是GCC编译工具链将.c文件转换成机器码可执行文件cubeMX生成.c文件2.2 写一段最简单的程序先创建.sGCC文件。去模拟int a1;语句的汇编汇编效率最高和CPU直接对话为什么不用汇编语言可移植性封装性都不如高级语言根据汇编手册去对照编译出.o文件二进制中间文件通过链接过后的才是可执行文件通过hex转换成.hex文件可以更清晰看见可执行文件的结果。烧录把编译好的机器码二进制数据写到CPU存储器中。方式USB蓝牙WIFI后2者是无线通讯方式专业术语叫OTA升级2.3 反汇编图增加了一些细节反汇编逆向的过程把已经转换的机器码转换为汇编代码。.s到.o文件是把汇编代码转为机器码。反汇编作用将商品的机器码获取出来然后反汇编为汇编代码可以看见主要的算法逻辑工具反汇编器(有命令)将.bin文件转成.s。.hex也可反汇编 .o以及.elf都可以反汇编.elf 是裸机/Linux 的可执行文件.exe 是 Windows 的可执行文件不可写进MCU。高级语言.c到.s汇编文件但是可以将汇编代码转为C语言吗不是很好的效果。启动流程我们写的程序是怎么开始执行的呢STM32怎么启动的程序计数器PC从中断向量表的第二项获取初始值初始化中断向量表初始化堆栈指针 MSPPC程序计数器PC 寄存器里永远存着下一条即将被 CPU 取指执行的指令的内存地址。从0地址处启动伪代码GNU 伪操作是你写在.s文件里让汇编器执行的命令GNU 伪操作 以.开头的指令不是给 CPU 看的是给汇编器看的。STM32启动原理芯片用户可以根据实际需求来选择启动方式通过映射到0地址处。ARM公司只是提供了从0地址处开始启动STM32Id链接脚本链接脚本 告诉链接器「哪个节区往哪放」的地图CPU寄存器寄存器CPU内部存储器CPU外部存储器比寄存器慢4个指令周期左右SMP多核处理器一个核就有一组寄存器R13SP堆栈指针R14LR链接寄存器R15PC程序计数寄存器R0-R12通用寄存器一般自己写寄存器汇编代码都是在基础寄存器上面写因为一些指令无法在特殊寄存器上面生效我们的汇编指令叫GNU另一个对比就是ARM汇编指令PC寄存器R15CPU执行程序的本质就是靠PC寄存器不断的更新更新频率由时钟决定SP堆栈指针寄存器R13堆栈指针 SP 就是 CPU 用来记当前栈顶在哪的寄存器——PUSH 时它递减POP 时它递增始终指向栈上最新存的数据push递减是因为是向下计数POP取读数据LR链接寄存器R14CPU 自动帮你记这个函数执行完了跳回哪的专用寄存器。还有一个重要作用记录异常返回值存储系统嵌入式编程的本质右边不是CPU存储系统是存储器介质设备通过通讯外设进行与CPU连接嵌入式编程的本质嵌入式编程本质上就是在操作存储器地址空间单元。每一条 C 语句最终都溯源到汇编所以 STM32 编程 查手册找地址 → 往地址写值 → 硬件就按你的设定工作。 HAL 库只是把这一层封装了让你不用记地址。读写存储器i和i谁的效率高没有编译优化下不一定有加编译优化下一般是等效率的电压钳位电路把I/O输入控制在VDD和VSS之间大于VDD上面就导通小于VSS下面就导通想中间过去只能满足在VDD和VSS之间。嵌入式编程就是在读写存储器中断的本质抢占型调度机制程序崩溃的本质程序崩溃的本质 CPU 执行了它无法理解的指令或访问了不该碰的地址触发了硬件级的异常捕获机制高阶调试专题int a1;其中a放在内存左值可读可写掉电丢失1右值只能读放在flash中掉电不丢失内存控制器是厂家定义的CPU里面有专门做计算的ALU计算电路模块寄存器叫存储电路模块韦东山调试专题在Keil5里面点击调试会自动帮我们下载好程序故需要先进行连接板子ST-Link 核心价值是 下载 调试其中调试断点/单步/看变量是它的不可替代价值——串口下载做不到。走SWD调试。Debug模式必须要连接ST-LinkCtrlB可以去掉所有断点也可以选择在断点处运行多少次Step Out步出快捷键 ShiftF8作用如果你已经进入了某个函数内部按这个按钮会一次性执行完当前函数剩下的所有代码然后自动跳回到 “调用这个函数的那一行” 的下一行。比如你不小心按 F7 进到了 HAL 库的长函数里或者你看完了函数前半段逻辑确认没问题想快速退回到主循环里就按 ShiftF8 直接跳出当前函数ARM架构volatile主要是优化作用编译器看你没用这个变量或者函数就会优化掉变成一个空函数。导致一些问题SP 的值是一个内存地址而这个地址处存的是栈顶数据。地址处我们去查找RAM对应的存储单元第一条变了就乱套了后续程序都出错第二条那么其他寄存器由谁来保证不变呢上张截图是从LR寄存器的二进制位数得到Cortex-M3 内核没有 FPU不支持硬浮点栈存在RAM里面。寄存器里存的是32 位的值4字节——可能是数字、地址、字符、状态标志CPU 不关心它是什么类型代码说它是啥就是啥。STMFD 一次把多个寄存器按顺序压进栈类似于PUSH举例STMFD SP!, {R4-R11, LR}顺序编号小的寄存器存低地址LR 被压进栈里备用!SP 压完更新 SP关于无调式器打印出来的东西自己创建一个内存空间做打印栈然后自己写汇编代码让软件存入其他寄存器相比栈帧的寄存器怎么知道我们程序崩溃呢调试全速运行然后跳转到handle函数首先看PC地址如果搜素不到或者乱七八糟就看LR寄存器的值就找到崩溃在哪个函数里面疑似LR判断条件core 文件 程序死机瞬间的现场快照把崩溃那一刻的寄存器、栈、内存全部存下来事后离线分析。GDB又是啥GDB 和 Keil 调试是同一个东西的两个形态GDB GNU DebuggerLinux 世界的Keil 调试器——只是它没有图形界面全靠敲命令。你学的东西它全能干还多一个绝活离线分析 core 文件。C语言

相关新闻

5943 张|非机动车辆交通行为检测数据集|摩托车 / 自行车违章识别 YOLO 数据集 交通安防数据集|9 类非机动车违章行为识别,YOLO/VOC/COCO 多格式 高空监控视角非机动车违规检测数

5943 张|非机动车辆交通行为检测数据集|摩托车 / 自行车违章识别 YOLO 数据集 交通安防数据集|9 类非机动车违章行为识别,YOLO/VOC/COCO 多格式 高空监控视角非机动车违规检测数

智慧交通-非机动车辆交通行为检测数据集,# 非机动车辆交通行为检测数据集 数据集基础信息表项目参数详情数据集名称非机动车辆交通行为检测数据集总图片数量5943张图像分辨率360*640标注格式YOLO、VOC、COCO总类别数9类训练集4457张验证集892张测试集594张类别分布表…

2026/8/8 10:39:25 阅读更多 →
KLayout开源版图设计:打破EDA垄断的专业级芯片设计解决方案

KLayout开源版图设计:打破EDA垄断的专业级芯片设计解决方案

KLayout开源版图设计:打破EDA垄断的专业级芯片设计解决方案 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout 面对商业EDA软件动辄数十万的授权费用和封闭的技术生态,芯片设计行业迫切需要一…

2026/8/8 10:39:25 阅读更多 →
SSE流式响应:累计文本与增量Delta模式的技术选型指南

SSE流式响应:累计文本与增量Delta模式的技术选型指南

1. 项目概述:从“一句话”到“逐字流”的体验革命在AI应用开发领域,尤其是大模型集成中,我们正经历着一场从“等待”到“陪伴”的交互体验变革。想象一下,你向一个AI助手提问一个复杂问题,传统的API调用方式是&#xf…

2026/8/8 10:39:25 阅读更多 →

最新新闻

3步搞定北理工论文排版:BIThesis LaTeX模板终极使用指南

3步搞定北理工论文排版:BIThesis LaTeX模板终极使用指南

3步搞定北理工论文排版:BIThesis LaTeX模板终极使用指南 【免费下载链接】BIThesis 📖 北京理工大学非官方 LaTeX 模板集合,包含本科、研究生毕业设计模板及更多。🎉 (更多文档请访问 wiki 和 release 中的手册&#x…

2026/8/8 22:00:05 阅读更多 →
AutoRemesher:3步搞定复杂3D模型的终极四边形网格优化方案

AutoRemesher:3步搞定复杂3D模型的终极四边形网格优化方案

AutoRemesher:3步搞定复杂3D模型的终极四边形网格优化方案 【免费下载链接】autoremesher Automatic quad remeshing tool 项目地址: https://gitcode.com/GitHub_Trending/au/autoremesher 还在为3D建模中的网格优化而头疼吗?面对杂乱无章的三角…

2026/8/8 22:00:05 阅读更多 →
MFC扩展库BCGControlBar Pro v33.5新版亮点 - 其他增强功能

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 其他增强功能

BCGControlBar 库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。BCGControlBar 专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

2026/8/8 22:00:05 阅读更多 →
Boltz-2:生物分子结构预测的革命性突破,让药物发现快1000倍

Boltz-2:生物分子结构预测的革命性突破,让药物发现快1000倍

Boltz-2:生物分子结构预测的革命性突破,让药物发现快1000倍 【免费下载链接】boltz Official repository for the Boltz biomolecular interaction models 项目地址: https://gitcode.com/GitHub_Trending/bo/boltz 在生物医药研发领域&#xff0…

2026/8/8 22:00:04 阅读更多 →
3步快速上手:用Oxidized打造企业级网络配置备份系统

3步快速上手:用Oxidized打造企业级网络配置备份系统

3步快速上手:用Oxidized打造企业级网络配置备份系统 【免费下载链接】oxidized Oxidized is a network device configuration backup tool. Its a RANCID replacement! 项目地址: https://gitcode.com/GitHub_Trending/ox/oxidized 还在为网络设备配置备份而…

2026/8/8 21:59:04 阅读更多 →
为什么众多身高管理品牌,总喜欢拿智仕高做对比?

为什么众多身高管理品牌,总喜欢拿智仕高做对比?

不少家长发现一个有趣的现象:打开抖音、小红书、视频号、公众号、母婴社群,很多成长营养品牌做测评、做对比时,不约而同把智仕高当作参照标杆。 很多人疑惑:市面上长高产品数不胜数,为何各类主播偏偏盯着智仕高对比&am…

2026/8/8 21:59:04 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/8 17:02:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →