单片机的内存分配详解
对于初学者而言,对单片机的内存分配往往最让人头疼,很多人学了单片机几年 都不知道单片机内部的内存使用情况是如何分配的。要了解 ROM、RAM启动,首先 需要对 链接器 Linker 如何分配内存有一定的了解。通常,对于栈生长方向向下的单片机,其内存一般模型是:
一个进程运行时,所占用的内存,可以分为如下几个部分:
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
4、文字常量:常量字符串就是存放在这里的,程序结束后由系统释放。
5、程序代码:存放函数体的二进制代码。
在数组前面加code关键字是把代码放到哪个区啊? 单片机内存都包含什么ramrom和flash吗? 通常情况下单片机的堆区和栈区都分别位于哪里呢 首先单片机的内存可以大小分为ram和rom,我们可以将其等效为flash和sram,其中根据flash和sram的定义可得,flash里面的数据掉电可保存,sram中的并不可以,但是sram的执行速度要快于flash,可以将单片机的程序分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区)和ZI-data(零初始化数据区)。 程序代码区:存放函数体的二进制代码,可以想象也是被包含在flash,因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中。 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。这些值是可读写的,那么stack应该被包含在RW-data(读写数据存储区),也就是单片机的sram中。 全局区(静态区)(static)的这些数据也是可读可写的,和stack、heap一样,被包含在sram中。
页:
[1]