Keil和IAR编译存储的描述和扩展

要知道代码、常量、全局、局部变量存储在哪儿,就需要了解FLASH和RAM的一些特性,在工程中要具体分析其大小及对应存储地址,可以从map文件中分析。提醒:RW-data已初始化的数据会存储在Flash中,上电会从FLASH搬移至RAM中。编译单个文件(点击),会出现下面信息(若没有DATA就没有那一行):本节扩展一下RAM的一些知识,有助于大家对程序运行时RAM的情况。...

写在前面我

Keil、IAR构建(Build)窗口中打印的信息:

尺寸:代码=-data=268RW-data=44ZI-data=1028

72 765 字节

3 508 字节

20 202 字节

5 676 字节

926 字节

1 148 字节

相信大家都看过上面的资料,应该知道它们的大概意思了,但是有多少朋友对存储的详细知识有深入的了解呢?

要知道代码、常量、全局和局部变量存放在哪里,需要了解FLASH和RAM的一些特性。在项目中需要分析它们的大小和对应的存储地址纬衡出图管理系统,可以从map文件中分析。

简述其意义Ⅱ

为了大多数人的兴趣,简要说明上述印刷信息的含义。特此提醒大家,网上有很多相关资料Able Fax Tif ,但网上有些资料含糊不清,可能会误导大家,如:RW-data 是一个已初始化的全局变量。修改后的变量称为静态变量,与全局变量仍有区别,但初始化后的静态变量也归类为RW-data。

1.Keil编译窗口信息

尺寸:代码=-data=268RW-data=44ZI-data=1028

代码:指代码的大小;

ro-data:指内联数据(data)以外的常量数据;

RW-data:指可读写(RW),已初始化的变量数据;

ZI-data:指未初始化(ZI)的变量数据;

Code、Ro-data:位于FLASH中;

RW-data、ZI-data:位于RAM中;

提醒: RW-data 的初始化数据会存储在 Flash 中,上电后会从 FLASH 移动到 RAM 中。

关系如下:

RO 大小 = 代码 + RO 数据

RW 大小= RW 数据 + ZI 数据

ROM 大小 = 代码 + RO 数据 + RW 数据

2.IAR 编译窗口信息

IAR有两种情况注册机怎么分配路径,但意思差不多,但显示不同:

编译工程(点击Make),会出现如下信息:

72 765 字节

3 508 字节

20 202 字节

编译单个文件(点击),会出现如下信息(如果没有DATA,则没有行):

5 676 字节

926 字节

1 148 字节

code:代码大小(类似于CODE);

data:常量数据(类似于 CONST);

data:读写可变数据(类似于DATA);

阐明:

IAR 中的数据等价于 Keil 中的 RW Data + ZI Data

内存 (RAM) 分配 III

本节扩展了RAM的一些知识,有助于您了解程序运行时RAM的情况。

内存分为5类:

1、栈:由编译器自动分配和释放,存放函数的参数值、局部变量的值等。

2、堆区(heap):一般由程序员分配和释放(使用free)。如果程序员不释放它,它就会一直被占用。一般来说,微控制器类的程序一般不使用堆。

3、全局区(静态区)():将全局变量和静态变量的存储放在一起,初始化的全局变量和静态变量在同一个区域,未初始化的全局变量和未初始化的静态变量在同一个区域区域。另一个相邻的区域。

4、字面常量区(const):常量字符串放在这里。

5、程序代码区(code):存放函数体的二进制代码。

经典例子:

整数a = 0;全局初始化区

字符 *p1; 全局未初始化区域

主要(无效)

{

诠释 b; // 堆

字符 s[] = "abc"; //堆

字符 *p2; //堆

字符 *p3 = ""; \0";//在常量区CAD迷你编辑器,p3在栈上。

诠释 c = 0; //全局(静态)初始化区

p1 = (char *)(10);

p2 = (char *)(20);

//分配的10和20字节的区域在堆区。

(p1, ""); //\0 放在常量区注册机怎么分配路径,编译器可以优化到一个位置,p3 所指向的""。

}

相关文章

发表评论