基于ARM的微机原理学习笔记(一)

1 PC和MCU场景程序执行时的区别

  1. PC场景时CPU只能访问ram,映射的整个地址空间都是ram和其他设备的IO接口,程序执行的时候需要从存储器拷贝到ram里,然后CPU再从ram进行取指令执行指令等操作;
  2. MCU场景CPU可以同时访问ram和flash,映射的地址空间一部分是ram一部分是flash一部分是其余外设,程序执行的时候不需要从存储器拷贝到ram里,CPU直接从flash进行取指令执行指令等操作,但是flash的写操作需要先擦后写,寿命有限而且速度缓慢,所以对于数据的操作需要在ram中进行(有初值的全局变量初值存在flash中,芯片上电启动时由启动代码把初值从 Flash 拷到 RAM,就是 .data 段的初始化,只读数据const常量,字符串的字面量这种依然存放在flash中),CPU执行的时候对数据的操作访问ram的地址,对代码的读取访问flash的地址。

2 程序执行局部性原理

程序执行局部性原理(Principle of Locality)是计算机体系结构中的经验规律之一,它表明程序在某个时间段内,只会反复访问一小部分地址,而不是均匀地访问整个地址空间。一是时间局部性,刚访问过的地址,很快还会再被访问。比如一个循环体里的指令,会被一遍遍反复取指执行;循环变量 i 这种常用变量会被反复读写。二是空间局部性,访问过某个地址后,它附近的地址很快也会被访问。这是MCU缓存存在的理论基础,CPU运行太快、内存反应相对太慢,中间夹一个又小又快的缓存。当访问一个地址时,先在cache中查找,有的话立即从cache中读取到CPU,否则从主存中去读取该数据,同时把它周围一整块一起搬进来(空间局部性,预判你接下来要读隔壁的数据)。只要程序行为符合局部性,大多数访问就能命中缓存,整体速度接近"小而快",而不是被"大而慢"拖累。

3 STM32的芯片结构

STM32基于ARM Cortex-M内核,内部采用改良的哈佛架构(Modified Harvard Architecture)。

物理上:指令总线(I-Bus)和数据总线(D-Bus)是分离的,CPU可以同时从Flash取指令和从RAM读写数据,这与传统冯·诺依曼架构(共享同一条总线)不同。

逻辑上:Flash和RAM被映射到统一的线性地址空间(例如STM32F103的Flash在0x08000000,SRAM在0x20000000),程序员看到的是一个连续的地址范围,这一点又类似于冯·诺依曼架构。

因此,STM32既不是纯粹的哈佛架构(地址空间独立),也不是纯粹的冯·诺依曼架构(总线不分离),而是结合了两者优点的改良哈佛架构。

4 CPU的工作步骤

取指:从内存(或Flash)中取出下一条要执行的指令,并将其送入CPU内部的指令寄存器(IR),取指结束后PC指针就会立即更新、

译码:分析指令寄存器中的机器码,确定这条指令要执行什么操作,以及操作数在哪里。

执行:真正完成指令所规定的运算或操作。

存结果:将执行阶段产生的结果写回到目标寄存器或内存中。

相关推荐
Song_RsHt2 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
sbjdhjd2 小时前
AI产业周度动态:从“更强模型”走向“可执行、可治理、可计价”的系统竞争 (2026年10月19日—10月25日)
人工智能·笔记·ai·开源·gemini·信息差·claude code
ss2733 小时前
AI时代首先数据库-PostgreSQL实战笔记 27 PostgreSQL数据写入与读取流程解析
数据库·笔记·postgresql
深圳老胡4 小时前
压力检测空吸功能硬件方案全解析:主流压力传感器品牌与实现路径
笔记·单片机·代码规范
程序猿追4 小时前
返回 null 不一定入队成功:鸿蒙 KMP上的并发优先队列观察笔记
笔记·华为·harmonyos·kmp
~kiss~5 小时前
PRO-LONG: Programmatic Memory Enables Long-Horizon Reasoning 程序式记忆赋能长程推理
学习
程序猿编码5 小时前
不依赖 vLLM/llama.cpp:一套面向学习的 DeepSeek-R1 CUDA 推理实现
c++·学习·语言模型·llama·vllm·大模型推理
崔高杰5 小时前
【多论文阅读笔记】下一阶段,Agent记忆关注什么能力?
论文阅读·笔记
ms72wx5 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker