单片机内存映射

在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM。在对于 RAM 紧缺的嵌入式系统中,是缺少 MMU 内存管理单元的。

因此在一些嵌入式系统中,比如常用的 STM32 来讲,内存映射被划分为闪存段(也被称为Flash,用于存储代码和只读数据)和RAM段(用于存储读写数据)。

一、FLASH闪存

文本段 (Text):可执行代码 (Executable Code)和常量 (Literal Value)

只读数据区域 (Read Only Data)

数据复制段 (Copy of Data Section):存放程序中初始化为非 0 值的全局变量的初始值(之所以要将初始值存放到这里,是因为全局变量是存放在 RAM 上的,RAM 上的值掉电便丢失,每次上电后这些变量是要进行重新赋值的,而重新赋的值就存放在这里。那为什么不存放初始化为 0 的全局变量初始值呢,原因也很简单,既然是初始化为 0,那么在上电后统一对存放初始化为 0 的全局变量的那块区域清0就好了。)

二、RAM

  • 栈 (Stack) : 存放局部变量和函数调用时的返回地址
  • 堆 (heap) : 由 malloc 申请,由 free 释放
  • bss : 存放未初始化或者是初始化为 0 的全局变量和静态变量
  • data : 存放初始化为非 0 值的全局变量和静态变量

三、总结

Flash (ROM):存放程序代码、常量和初始化过的全局/静态变量。

RAM:包含堆、栈和静态区,其中堆用于动态分配,栈用于函数调用,静态区存储全局和静态变量的实际数据。

堆与栈:堆用于动态内存分配,栈用于函数调用栈帧,二者均属于RAM。

全局与静态变量:按初始化与否,分别存储在Data Segment(已初始化)和BSS Segment(未初始化)中,最终都在RAM中占用空间。

四、C语言内存分区

相关推荐
国科安芯43 分钟前
实战验证:ASM1042S2S CANFD收发器的质子单粒子效应试验与在轨性能
网络·人工智能·单片机·嵌入式硬件·物联网·fpga开发
Zevalin爱灰灰1 小时前
基于STM32实现OTA&BootLoader 第二章——外设功能开发
stm32·单片机·物联网·嵌入式
2501_918126911 小时前
stm32能刷什么程序?
linux·stm32·单片机·嵌入式硬件·学习
国科安芯1 小时前
ASP4644S电源芯片引脚功能与参考设计输出电压计算方法
网络·单片机·嵌入式硬件·fpga开发·性能优化
国科安芯2 小时前
抗辐照MCU芯片在核工业水下探测耐辐照数字摄像机中的应用研究
网络·单片机·嵌入式硬件
VALENIAN瓦伦尼安教学设备2 小时前
品牌故事:1964年塞纳河畔ASHOOTER激光对中仪诞生的夜晚
数据库·人工智能·嵌入式硬件
Zevalin爱灰灰2 小时前
基于STM32实现OTA&BootLoader 第一章——概述
stm32·单片机·物联网·嵌入式
一路往蓝-Anbo3 小时前
第 10 章:OpenAMP 实战——构建 M33 与 Linux 的 RPMsg 消息隧道
linux·运维·服务器·驱动开发·stm32·单片机·嵌入式硬件
FakeOccupational3 小时前
【电路笔记 STM32】STM32CubeMX配置&自动移植FreeRTOS + STM32&FreeRTOS点灯的最简单示例
笔记·stm32·单片机
2501_918126913 小时前
stm32什么程序效率最高,体积小,运行快,适应广?
c语言·stm32·单片机·嵌入式硬件·学习