FM33LE0xx系列单片机,在keil5环境下编译后显示四个储存区域,分别是
Code, RO-data,RW-data,ZI-data
Code为程序代码部分
RO-data 表示只读变量 即程序定义的常量const
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
储存区域如下:
Code, RO-data,RW-data ............flash
RW-data, ZIdata...................RAM
不过初始化时RW-data从flash拷贝到RAM
所以相当于Code, RO-data占用flash的空间;RW-data, ZIdata占用RAM的空间。
可以这么理解:只有常量与代码部分存储在flash中,其余的各种变量均存放在ram中。
此外RAM还分为栈区、堆区、静态存储区:
1.栈区:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2.堆区:一般由程序员分配释放,通过malloc申请与free释放。存放malloc申请的空间等。
3.静态存储区:一般存放全局变量、静态全局(局部)变量、数组等。
数组中值得注意的是:
如果数组是在函数内部定义的局部变量,它将存放在栈区。栈区的内存由系统自动分配和管理,它在函数调用期间分配,并在函数结束时自动释放。栈区的存储空间是有限的,并且随着函数的嵌套调用和局部变量的声明和销毁而动态变化。如果数组是全局变量或静态变量,它将存放在静态存储区。静态存储区的内存在程序启动时进行初始化,并且在整个程序的生命周期内保持不变。数组的存储空间在程序执行期间一直存在,而不受函数调用的影响。
这里说一下,如果RAM里的数据超过上限,程序可以烧录,但是不会运行;flash数据超过上限,程序无法烧录进单片机。
欢迎批评指正!