目录
一,编译产物
1.1 .o 文件(目标文件):
1.2 .hex 文件(十六进制文件)
1.3 .bin 文件(二进制文件)
1.4 .elf 文件(可执行链接格式文件)
1.5 .map 文件(映射文件)
1.6 .lst 文件(列表文件)
二,map文件解析
2.1 程序段交叉引用关系(Section Cross References)
2.1.1 示例
2.1.2 编译链接过程
2.1.3 交叉引用关系
2.1.4 map 文件中的体现
2.2 删除映像未使用的程序段(Removing Unused input sections from the image)
2.2.1 为什么需要删除未使用的程序段?
2.2.2 如何删除未使用的程序段?
2.2.3 使用GCC编译器
2.2.4 使用Keil MDK
需要注意的是,过度优化可能会导致一些意想不到的问题,例如:
2.3 映像符号表(Image Symbol Table)
2.3.1 映像符号表的作用
2.3.2 映像符号表的示例
2.4 映像内存分布图(Memory Map of the image)
映像内存分布图的示例
2.5 映像组件大小(Image component sizes)
2.5.1 影响映像组件大小的因素
2.5.2 如何减小映像组件大小
2.5.3 示例
一,编译产物
当我们编译一个STM32工程时,编译器会将我们编写的C/C++源代码、汇编代码等,经过一系列的编译、汇编、链接等过程,最终生成可供目标MCU执行的固件。在这个过程中,会产生许多中间文件和最终产物。
常见的编译产物如下:
1.1 .o 文件(目标文件):
每个源文件编译后都会生成一个对应的 .o 文件。.o 文件包含了该源文件编译后生成的机器码,以及符号表等信息。符号表中记录了该模块中定义的函数、变量等符号,以及它们在内存中的地址。
1.2 .hex 文件(十六进制文件)
它是一个文本文