MDK5(keil)编译信息含义(占用sram,flash空间)与 MAP文件

本文详细介绍了KeilVisionIDE中查看和解析.map文件的过程,以及.map文件在内存布局、代码统计、数据统计、符号信息、模块信息和调试优化等方面的应用。它展示了.map文件如何提供编译后程序的详细信息,是开发者的重要工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

编译输出信息:

编译信息解释:

MAP文件

以下是在 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 文件的步骤:

  1. 打开 Keil Vision。
  2. 在菜单中选择 "File" -> "Open Project...",然后选择你的项目文件。
  3. 在 Keil Vision IDE 中,点击 "Project" 菜单,选择 "Options for Target"。
  4. 在弹出的对话框中,选择 "Listing" 选项卡。
  5. 在 "Generate Map File" 选项旁边,确保选中了 "Create ROM/FLASH Map" 和 "Create Object Module List"。
  6. 重新编译你的项目。

这将生成一个 .map 文件,其中包含了代码段和只读数据段的详细信息。

你也可以使用文本编辑器查看 .map 文件,查找 .map 文件中关于 "Code" 和 "Ro-data" 的部分。通常,这些信息会以某种形式列出,显示代码段和只读数据段的起始地址、大小等信息。

请注意,不同的编译工具链和版本的 Keil MDK 可能会在 .map 文件的格式上有所不同,因此具体查找的步骤可能会有一些变化。在 Keil Vision IDE 的文档中,你可以找到有关查看 .map 文件的更详细的信息。

.map 文件是编译器和链接器生成的映射文件,提供了关于编译后程序的详细信息。这些信息对于调试、优化和了解程序在内存中的布局非常有用。

以下是一些主要用途:

  1. 内存布局: 显示程序在内存中的布局,包括代码段、只读数据段、读写数据段等的起始地址和大小。

  2. 代码统计: 提供了有关代码段的统计信息,如代码长度、指令数量等。这对于了解程序的大小和结构非常有帮助。

  3. 数据统计: 提供了有关数据段的统计信息,包括只读数据、读写数据和零初始化数据的大小。这对于了解程序的数据占用情况很有帮助。

  4. 符号信息: 列出了程序中定义的符号(函数、变量等)的地址和大小。这对于了解符号在内存中的分布很有用。

  5. 模块信息: 列出了程序中各个模块(源文件或目标文件)的信息,包括起始地址、大小等。

  6. 调试信息: 在一些情况下,.map 文件可能包含调试信息,其中列出了源代码行与生成的机器代码之间的映射,以帮助调试器在源代码级别进行调试。

  7. 优化: 可以通过 .map 文件查看编译器和链接器对代码的优化情况,例如函数内联、代码消除等。

  8. 分析资源使用: 对于嵌入式系统,.map 文件对于分析 Flash 和 RAM 的使用情况非常有帮助,有助于优化程序占用的存储器。

总体而言,.map 文件是一个强大的工具,为开发人员提供了深入了解程序内部结构和性能特征的途径,有助于进行调试、优化和资源管理。

.map 文件是链接器生成的映射文件,提供了关于编译后程序各个模块的详细信息。

常见字段及其含义:

  1. Module Name:

    • 含义: 模块名称,通常对应源文件的名称。
  2. Address:

    • 含义: 模块在内存中的起始地址。
  3. Size:

    • 含义: 模块的大小,即代码或数据的长度。
  4. Type:

    • 含义: 模块的类型,例如 CODE 表示代码段, DATA 表示数据段, RO-DATA 表示只读数据段等。
  5. Align:

    • 含义: 模块的对齐方式。
  6. Load Region:

    • 含义: 模块所属的加载区域,通常对应内存中的不同区域。
  7. Load Address:

    • 含义: 模块在加载区域中的起始地址。
  8. Execution Region:

    • 含义: 模块所属的执行区域,通常对应内存中的不同区域。
  9. In Input Section:

    • 含义: 模块所属的输入段。
  10. Attributes:

    • 含义: 模块的属性,例如可执行、只读、可写等。
  11. Size(Bytes):

    • 含义: 模块的大小,以字节为单位。
  12. Size(Bytes) in ranges:

    • 含义: 包含在不同地址范围内的模块大小。
  13. ARM code:

    • 含义: 模块中 ARM 指令的数量。
  14. Thumb code:

    • 含义: 模块中 Thumb 指令的数量。
  15. ARM/Thumb Mixed:

    • 含义: 模块中混合 ARM 和 Thumb 指令的数量。
  16. Veneers:

    • 含义: 模块中的汇编器插入的修复跳转的小代码块。
  17. CODE (RAM):

    • 含义: 存储在 RAM 中的代码大小。
  18. RO-DATA (RAM):

    • 含义: 存储在 RAM 中的只读数据大小。
  19. RW-DATA (RAM):

    • 含义: 存储在 RAM 中的读写数据大小。
  20. ZI-DATA (RAM):

    • 含义: 存储在 RAM 中的零初始化数据大小。

这只是一份通用的解释,具体的 .map 文件格式可能取决于使用的编译器和工具链。建议查阅相关的文档以了解更多关于特定 .map 文件格式的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值