目录
以下是在 Keil Vision IDE 中查看 .map 文件的步骤:
编译输出信息:
Program Size: Code=59690 RO-data=8206 RW-data=272 ZI-data=7288

编译信息解释:
代码段(Code):
存储在 Flash 存储器中。这是程序的可执行指令部分,它通常包含你的程序的实际代码。
只读数据段(RO-data):
存储在 Flash 存储器中。这通常包括程序中的常量数据,如字符串、常量变量等。这些数据在程序执行期间不会被修改。
读写数据段(RW-data):
存储在 SRAM(静态随机存取存储器)中。这部分包含了在程序执行期间可以修改的数据。这可能包括全局变量、静态变量等。
零初始化数据段(ZI-data):
存储在 SRAM 中。这部分包含了在程序执行期间初始化为零的数据。这可能包括未初始化的全局变量、未初始化的静态变量等。
MAP文件
在 Keil MDK5 中,.map 文件包含了有关编译后的程序的详细信息,包括代码段(Code)和只读数据段(Ro-data)的大小。你可以使用 Keil Vision IDE 或者一个文本编辑器来查看这个文件。
以下是在 Keil Vision IDE 中查看 .map 文件的步骤:
- 打开 Keil Vision。
- 在菜单中选择 "File" -> "Open Project...",然后选择你的项目文件。
- 在 Keil Vision IDE 中,点击 "Project" 菜单,选择 "Options for Target"。
- 在弹出的对话框中,选择 "Listing" 选项卡。
- 在 "Generate Map File" 选项旁边,确保选中了 "Create ROM/FLASH Map" 和 "Create Object Module List"。
- 重新编译你的项目。
这将生成一个 .map 文件,其中包含了代码段和只读数据段的详细信息。
你也可以使用文本编辑器查看 .map 文件,查找 .map 文件中关于 "Code" 和 "Ro-data" 的部分。通常,这些信息会以某种形式列出,显示代码段和只读数据段的起始地址、大小等信息。
请注意,不同的编译工具链和版本的 Keil MDK 可能会在 .map 文件的格式上有所不同,因此具体查找的步骤可能会有一些变化。在 Keil Vision IDE 的文档中,你可以找到有关查看 .map 文件的更详细的信息。
.map 文件是编译器和链接器生成的映射文件,提供了关于编译后程序的详细信息。这些信息对于调试、优化和了解程序在内存中的布局非常有用。
以下是一些主要用途:
-
内存布局: 显示程序在内存中的布局,包括代码段、只读数据段、读写数据段等的起始地址和大小。
-
代码统计: 提供了有关代码段的统计信息,如代码长度、指令数量等。这对于了解程序的大小和结构非常有帮助。
-
数据统计: 提供了有关数据段的统计信息,包括只读数据、读写数据和零初始化数据的大小。这对于了解程序的数据占用情况很有帮助。
-
符号信息: 列出了程序中定义的符号(函数、变量等)的地址和大小。这对于了解符号在内存中的分布很有用。
-
模块信息: 列出了程序中各个模块(源文件或目标文件)的信息,包括起始地址、大小等。
-
调试信息: 在一些情况下,
.map文件可能包含调试信息,其中列出了源代码行与生成的机器代码之间的映射,以帮助调试器在源代码级别进行调试。 -
优化: 可以通过
.map文件查看编译器和链接器对代码的优化情况,例如函数内联、代码消除等。 -
分析资源使用: 对于嵌入式系统,
.map文件对于分析 Flash 和 RAM 的使用情况非常有帮助,有助于优化程序占用的存储器。
总体而言,.map 文件是一个强大的工具,为开发人员提供了深入了解程序内部结构和性能特征的途径,有助于进行调试、优化和资源管理。
.map 文件是链接器生成的映射文件,提供了关于编译后程序各个模块的详细信息。
常见字段及其含义:
-
Module Name:
- 含义: 模块名称,通常对应源文件的名称。
-
Address:
- 含义: 模块在内存中的起始地址。
-
Size:
- 含义: 模块的大小,即代码或数据的长度。
-
Type:
- 含义: 模块的类型,例如 CODE 表示代码段, DATA 表示数据段, RO-DATA 表示只读数据段等。
-
Align:
- 含义: 模块的对齐方式。
-
Load Region:
- 含义: 模块所属的加载区域,通常对应内存中的不同区域。
-
Load Address:
- 含义: 模块在加载区域中的起始地址。
-
Execution Region:
- 含义: 模块所属的执行区域,通常对应内存中的不同区域。
-
In Input Section:
- 含义: 模块所属的输入段。
-
Attributes:
- 含义: 模块的属性,例如可执行、只读、可写等。
-
Size(Bytes):
- 含义: 模块的大小,以字节为单位。
-
Size(Bytes) in ranges:
- 含义: 包含在不同地址范围内的模块大小。
-
ARM code:
- 含义: 模块中 ARM 指令的数量。
-
Thumb code:
- 含义: 模块中 Thumb 指令的数量。
-
ARM/Thumb Mixed:
- 含义: 模块中混合 ARM 和 Thumb 指令的数量。
-
Veneers:
- 含义: 模块中的汇编器插入的修复跳转的小代码块。
-
CODE (RAM):
- 含义: 存储在 RAM 中的代码大小。
-
RO-DATA (RAM):
- 含义: 存储在 RAM 中的只读数据大小。
-
RW-DATA (RAM):
- 含义: 存储在 RAM 中的读写数据大小。
-
ZI-DATA (RAM):
- 含义: 存储在 RAM 中的零初始化数据大小。
这只是一份通用的解释,具体的 .map 文件格式可能取决于使用的编译器和工具链。建议查阅相关的文档以了解更多关于特定 .map 文件格式的信息。
本文详细介绍了KeilVisionIDE中查看和解析.map文件的过程,以及.map文件在内存布局、代码统计、数据统计、符号信息、模块信息和调试优化等方面的应用。它展示了.map文件如何提供编译后程序的详细信息,是开发者的重要工具。
2435

被折叠的 条评论
为什么被折叠?



