news 2026/3/5 18:05:12

存储器和寄存器的区别以及存储器映像-新手小白必看

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
存储器和寄存器的区别以及存储器映像-新手小白必看

一、寄存器 ≠ 存储器

- 本质区别

- 存储器(Memory):是一片连续的存储区域,主要用来存程序代码、变量、数据等,比如我们常说的 Flash 和 SRAM。它的地址是连续的,就像一个大仓库,按地址来存取。

- 寄存器(Register):是外设(比如 GPIO、ADC、DMA)里的专用硬件单元,用来控制外设的工作模式、状态和数据传输。每个寄存器都有一个独立的地址,但这些地址是离散分布在“外设地址空间”里的,不属于存储器地址范围。

- 形象比喻

你可以把整个 STM32 的地址空间想象成一个大商场:

- 存储器(Flash/SRAM):是商场里的大超市,货架是连续编号的,你按编号就能找到商品(数据/代码)。

- 寄存器:是商场里各个店铺的收银台、开关、监控器,每个设备都有自己的位置(地址),用来控制店铺的运行,它们不连续,也不属于超市货架。

二、存储器映像到底是什么?

STM32 把所有能被 CPU 访问的硬件资源(Flash、SRAM、寄存器等)都映射到了一个统一的 32 位地址空间里,这就是“存储器映像”。


简单来说,就是给每个硬件单元(不管是存储器还是寄存器)都分配了一个唯一的地址,CPU 只要通过这个地址就能读写它,不用区分它是内存还是外设。

(图源:b站江协科技stm32入门教程)

比如:

- 0x08000000 开始的地址是 Flash 存储器(存程序)

- 0x20000000 开始的地址是 SRAM(存变量)

- 0x40000000 开始的地址是 外设寄存器(比如 GPIO、ADC 的控制寄存器)


三、为什么要这么设计?

这样设计的好处是,CPU 可以用统一的指令来访问所有资源,不用为不同硬件设计不同的指令。比如:

- 读内存数据和读 GPIO 寄存器里的状态,用的是同一条 LDR 指令;

- 写变量到 SRAM 和配置 DMA 寄存器,用的是同一条 STR 指令。


ps:LDR(Load Register)和 STR(Store Register)是ARM 汇编里最核心的数据传输指令,负责在寄存器和内存(或存储器映射的寄存器)之间搬运数据。

LDR:把内存/寄存器地址里的数据加载到 CPU 寄存器中(读操作)。

STR:把CPU 寄存器里的数据存储到内存/寄存器地址中(写操作)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 2:23:20

用systemd管理开机任务,比init.d更稳定高效

用systemd管理开机任务,比init.d更稳定高效 1. 为什么需要重新思考开机启动管理 1.1 传统init.d的局限性正在显现 在嵌入式Linux设备上,尤其是Armbian这类基于Debian/Ubuntu的系统中,很多用户还在沿用老式的init.d脚本管理开机任务。这种方…

作者头像 李华
网站建设 2026/2/26 1:42:21

OpenHarmony + RN:Stack堆栈导航转场

React Native for OpenHarmony 实战:Stack堆栈导航转场详解 摘要 本文将深入探讨React Navigation的Stack导航器在OpenHarmony 6.0.0平台上的应用实践。文章从导航原理出发,分析React Native 0.72.5与OpenHarmony 6.0.0 (API 20)的兼容性适配要点&…

作者头像 李华
网站建设 2026/3/5 12:37:21

用React Native开发OpenHarmony应用:NativeStack原生导航

React Native for OpenHarmony 实战:NativeStack 原生导航详解 摘要 本文深入探讨React Native的NativeStack导航器在OpenHarmony 6.0.0平台上的应用实践。作为React Navigation生态中的高性能导航解决方案,NativeStack通过原生API实现流畅的页面过渡效…

作者头像 李华