ROM与RAM,储存地址、链接地址以及运行地址

一、ROM与RAM

ROM全称只读存储器(Read-Only Memory),RAM随机存取存储器(Random Access Memory)

1.ROM

特点:断电后数据不会丢失

在 STM32 中的作用 :用来存放编译后的程序代码、常量数据

IROM1就是stm32的内部flash,MDK会把编译生成的.o文件在这个地址链接

2.RAM

特点:断电数据消失

RAM是用来在程序运行时储存临时变量的、函数调用的栈以及动态分配的内存

二、储存地址、链接地址以及运行地址

1. 存储地址:程序 "放哪里存着" 的位置

程序编译完成后,物理上的储存地址(FLash、SD卡的具体地址)

STM32:程序存在内部 Flash(地址 0X08000000),这个地址就是存储地址

I.MX6U:程序存在 SD 卡(SD 卡的物理地址),这个就是存储地址

2. 链接地址:编译时 "预先约定的运行地址"

编译程序时,告诉编译器程序的运行地址,编译器会按照这个地址,给代码里的函数、变量 分配位置,比如函数 A 在链接地址 + 100 的位置,变量 B 在链接地址 + 200 的位置。

3. 运行地址:程序 "实际跑起来时所在的位置"

CPU 执行程序时,实际从哪个地址读取指令、访问数据的位置

STM32:因为 Flash 支持 "原地执行(XIP)",所以直接从 Flash(0X08000000)读指令运行,运行地址 = 存储地址

I.MX6U:SD 卡速度太慢,必须把程序复制到 DDR RAM(地址 0X87800000),运行时从 DDR 读指令,所以运行地址是 DDR 的 0X87800000。

思考:为什么stm32的运行地址与储存地址相同都在flash而I.MX6U需要从外部存储加载到 RAM 运行

stm32能在flash也就是rom里直接运行的直接原因就是XIP技术 然后就是内核需求低

TM32 用的是Cortex-M 内核 (面向 "微控制器",控制 LED、传感器这类简单场景),它的硬件设计支持 XIP(Execute In Place,原地执行)

Cortex-M 运行的代码通常很小(几 KB~ 几百 KB)、执行速度要求不高,Flash 的读取速度(一般几十 MB/s)完全能满足它的需求

I.MX6U 用的是Cortex-A 内核(面向 "应用处理器",类似 "小电脑",要跑 Linux、多任务程序这类复杂场景),它的需求决定了不能直接在 Flash / 外部存储里运行

RAM 的读写速度(DDR 可达几百 MB/s~ 几 GB/s)远快于 Flash/SD 卡 / EMMC(通常几十 MB/s),而 Cortex-A 运行的程序(比如 Linux 内核、应用程序)代码量大、逻辑复杂,必须用高速 RAM 才能保证流畅运行

Cortex-A 要跑的系统(比如 Linux)需要 "动态加载代码、多任务内存切换、内存动态分配" 等功能,这些都依赖 RAM 的 "可随机读写 + 高速访问" 特性而Flash不能这么灵活

相关推荐
Truffle7电子5 小时前
STM32CubeIDE/Programmer/Touch GFX 应用
stm32·单片机·嵌入式硬件
嵌入式×边缘AI:打怪升级日志5 小时前
100ASK-T113 Pro 开发板 Bootloader 完全开发指南
linux·ubuntu·bootloader
richxu202510016 小时前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
charlie1145141916 小时前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler016 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1137 小时前
Linux进程与线程编程详解
linux·c++
我星期八休息7 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
切糕师学AI7 小时前
深入解析 Zsh 与 Oh-My-Zsh:打造高效现代化终端
linux·终端·zsh
Deitymoon8 小时前
STM32——外部中断按键控制led
stm32·单片机·嵌入式硬件
czwxkn8 小时前
7STM32(stdl)flash内部闪存
stm32·单片机·嵌入式硬件