MCU单片机中内存和flash及堆栈的认识

Code 指存储到 flash【Rom】中的程序代码。
  @ ZI 英语是 zero initial, 就是程序中用到的变量并且被系统初始化为 0 的变量的字节 数,keil 编译器默认是把你没有初始化的变量都赋值一个 0,这些变量在程序运行 时是保存在 RAM 中的。
  @ RW 是可读可写变量,就是初始化时候就已经赋值了的,RW + ZI 就是你的程序总 共使用的 RAM 字节数。
  @ RO 是程序中的指令和常量,这些值是被保存到 Rom 中的。
  @ Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的 ROM 的字节总 数,也就是说程序所下载到 ROM flash 中的大小。
  为什么 Rom 中还要存 RW,因 为掉电后 RAM 中所有数据都丢失了,每次上电 RAM 中的数据是被重新赋值的, 每次这些固定的值就是存储在 Rom 中的,为什么不包含 ZI 段呢,是因为 ZI 数据 都是 0,没必要包含,只要程序运行之前将 ZI 数据所在的区域一律清零即可,包 含进去反而浪费存储空间。
 
所有的全局变量,静态变量之类的,全部存储在静态存储区,紧跟静态存储区之后的,是堆区(如没用到 malloc,则没有该区),之 后是栈区,栈在程序中存储局部变量。
在程序里面,所有的内存分为:堆+栈,只是他们各自的起始地址和增 长方向不同,他们没有一个固定的界限
堆:向高地址增长,
栈:向低地址增长。

你可能感兴趣的:(MCU知识)