上网查阅了相关的资料,本文主要受博主 " 非著名码农" 的启示,原文地址 http://blog.csdn.net/ropai/article/details/7493168。
第一部分 Section Cross Reference 文件引用关系分析
主要是各个源文件生成的模块之间相互引用的关系
如第一句: startup_stm32f10x_hd.o(RESET) refers to startup_stm32f10x_hd.o(STACK) for __initial_sp
意思是说 startup_stm32f10x_hd.o(由startup_stm32f10x_hd.s文件生成的目标文件)文件里的RESET段 引用了 startup_stm32f10x_hd.o文件里的STACK段里的一个全局符号__initial_sp,可能是全局变量也可能是一个函数. 后面的文字打的都是此意。
第二部分 Removing Unused input sections from the image.
就是将库中没有用到的函数从可执行映像中删除掉,减小程序的体积。
第三部分 Image Symbol Table 映像中的所有符号组成的表
Local Symbol 局部符号 既有各模块的静态函数也有公开函数,没搞明白,有懂的兄台指点一二。
Global Symbol 全局符号 各个文件模块中的全局变量、公开函数。
其中最为重要的部分 是这两句
Local Symbols
Symbol Name Value Ov Type Size Object(Section)
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE
../clib/angel/dczerorl2.s 0x00000000 Number 0 __dczerorl2.o ABSOLUTE
../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE
Ov Type 为Number 不占用空间,value都是地址0 ,size 也为0
Ov Type 为Section 开始占用空间,value都是中断向量的地址(例如0x08004000),size 为标号大小,按照4字节对齐
RESET 0x08004000 Section 428 startup_stm32f429xx.o(RESET)
!!!main 0x080041ac Section 8 __main.o(!!!main)
!!!scatter 0x080041b4 Section 52 __scatter.o(!!!scatter)
!!dczerorl2 0x080041e8 Section 90 __dczerorl2.o(!!dczerorl2)
!!handler_zi 0x08004244 Section 28 __scatter_zi.o(!!handler_zi)
.ARM.Collect$$_printf_percent$$00000000 0x08004260 Section 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000)
.ARM.Collect$$_printf_percent$$00000003 0x08004260 Section 6 _printf_f.o(.ARM.Collect$$_printf_percent$$00000003)
.ARM.Collect$$_printf_percent$$00000009 0x08004266 Section 6 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009)
.ARM.Collect$$_printf_percent$$0000000C 0x0800426c Section 6 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C)
.ARM.Collect$$_printf_percent$$00000014 0x08004272 Section 6 _printf_s.o(.ARM.Collect$$_printf_percent$$00000014)
.ARM.Collect$$_printf_percent$$00000017 0x08004278 Section 4 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017)
Global Symbols
Symbol Name Value Ov Type Size Object(Section)
。。。。
。。。。。
。。。。
。。。。
在map中的Local Symbols 最后发现:
0x20011a3c + 4 = 0x20011a40,所以全局变量之后紧跟堆栈(heap&stack)
heap 大小为0x2000 = 0x20013a40 - 0x20011a40
stack 大小为0x2000 = 0x20017a40 - 0x20013a40
栈顶为 0x20017a40 ,以上位置与启动文件中空间安排一致:
Stack_Size EQU 0x4000;
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
##解析:定义Stack_Size为常量0x4000,使用AREA伪指令定义一段数据空间,段名为STACK,属性为NOINIT, READWRITE, ALIGN=3,然后使用SPACE 为其分配一段空间,标号为 Stack_Mem ,空间大小为 Stack_Size,紧接着在下面放__initial_sp标号,因为Stack分配空间从高地址到低地址生长,所以Stack的最后地址为__initial_sp
;
;
;
Heap_Size EQU 0x2000;
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
第五部分 Memory Map of the imag 内存映射
Execution Region ER_IROM1 (Base: 0x08000000, Size: 0x00046398, Max: 0x00080000, ABSOLUTE) 这一段指的是FLASH,size很明显是已用FLASH大小,包括Code + RO_data。下面列的就是每个目标文件所占FLASH的明细了。
Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00008eb0, Max: 0x00010000, ABSOLUTE, COMPRESSED[0x00000350])这一段指的是片内SRAM,size就是RW_data + ZI_data所占用的片内SRAM的大小,则主堆栈指针MSP = 0x20000000 + 0x8eb0,程序开始运行时MSP就从这个地址开始为局部变量分配地址.
Execution Region ER$$.ARM.__AT_0x680830D0 (Base: 0x680830d0, Size: 0x00001024, Max: 0x00001024, ABSOLUTE, UNINIT)因为我为file结构变量定的地址是片外SRAM,所以map文件里也将片外SRAM的一些信息包括进来了,不过只有这个file结构体变量的大小哦0x1024
第六部分 Image component sizes 各目标文件的code \ ro \rw \zi的大小
显示列出工程中所有用的.c文件所生成的.o目标文件中各成分大小,然后是工程所添加的库文件所占的各成分大小。
从最后这一句看来
Code (inc. data) RO Data RW Data ZI Data Debug Library Name
91574 2618 16290 1296 680 81428 STemWin522_CM3_OS_Keil.lib
1538 64 133 16 0 1788 mc_w.l
818 0 0 0 0 1080 mf_w.l
----------------------------------------------------------------------
94120 2682 16432 1320 684 84296 Library Totals
STenWin522_CM3_OS_Keil.lib文件占用 (94120 + 16432 +1320)bytes的FLASH, (1320 + 684)bytes的SRAM,所以这就是为啥emWin移植需要至少2K内存的单片机!!!
---------------------
作者:fang_chuan
来源:CSDN
原文:https://blog.csdn.net/fang_chuan/article/details/50460814
版权声明:本文为博主原创文章,转载请附上博文链接!