您的位置 首页 技术

KEIL MDK输出map文件剖析01

前言前面写了一篇文章对__main函数的执行过程做了一个粗略的跟踪描叙,对一个烧录了程序的STM32开发板从启动复位到进入用户main函数的过程

前语

前面写了一篇文章对__main函数的履行进程做了一个大略的盯梢描叙,对一个烧录了程序的STM32开发板从发动复位到进入用户main函数的进程有了一个大约的了解,但是有许多问题感觉仍是模模糊糊,因而,今日又把KEIL MDK编译、链接后生成的map文件简略剖析一下,加深对链接器、嵌入式体系可履行映像特色的了解。、

一、文件剖析流程

1、榜首部分:Section Cross References

主要是各个源文件生成的模块之间彼此引证的联系。

stm32f10x.o(STACK) refers (Special) to stkheap2.o(.text) for __use_two_region_memory

比方上面这句话,stm32f10x.o是stm32f10x.s生成的方针文件模块,(STACK)是文件内界说的一个段,链接器把它视为一个Section,输入节。它引证了模块stkheap2.o输入节(.text)里边的一个大局符号__use_two_region_memory(可能是一个函数或变量)。这个(Special)不知道是什么含义。

剩余的根本都是这用的意思。

stm32f10x_vector.o(.text) refers to __main.o(!!!main) for __main

__main.o(!!!main) refers to kernel.o(.text) for __rt_entry

kernel.o(.text) refers to usertask.o(.text) for main

上面这几个关于程序含义比较严重用户在发动代码中调用了__main.o模块中的__main函数,__main又调用了kernel.o中的__rt_entry函数,最终kernel.o又调用了用户界说的main主函数。

2、第二部分:Removing Unused input sections from the image.

便是将库中没有用到的函数从可履行映像中删除去,减小程序的体积。

Removing os_mbox.o(.text), (1094 bytes).

Removing os_mutex.o(.text), (1744 bytes).

Removing os_sem.o(.text), (1016 bytes).

3、第三部分:Image Symbol Table

Local Symbols

符号表里的部分符号。

../../angel/boardlib.s0x00000000Number0boardinit1.o ABSOLUTE

../../angel/handlers.s0x00000000Number0__scatter_copy.o ABSOLUTE

../../angel/kernel.s0x00000000Number0kernel.o ABSOLUTE

../../angel/rt.s0x00000000Number0rt_raise.o ABSOLUTE

../../angel/scatter.s0x00000000Number0__scatter.o ABSOLUTE

../../angel/startup.s0x00000000Number0__main.o ABSOLUTE

../../angel/sys.s0x00000000Number0sys_exit.o ABSOLUTE

../../angel/sysapp.c0x00000000Number0sys_wrch.o ABSOLUTE

../../armsys.c0x00000000Number0_get_argv.o ABSOLUTE

../../division_7m.s0x00000000Number0rtudiv10.o ABSOLUTE

../../fpinit.s0x00000000Number0fpinit.o ABSOLUTE

../../heapalloc.c0x00000000Number0hrguard.o ABSOLUTE

../../printf.c0x00000000Number0_printf_outstr_char.o ABSOLUTE

../../signal.c0x00000000Number0defsig_exit.o ABSOLUTE

../../stdlib.c0x00000000Number0exit.o ABSOLUTE

../../stkheap.s0x00000000Number0heapext.o ABSOLUTE

以上是一些体系内部的部分符号,还有用户的一些部分符号

4、第四部分:Global Symbols

大局符号

_terminate_user_alloc– Undefined Weak Reference

_terminateio– Undefined Weak Reference

__Vectors0x08000000Data4stm32f10x_vector.o(RESET)

__main0x08000131Thumb Code8__main.o(!!!main)

__scatterload0x08000139Thumb Code0__scatter.o(!!!scatter)

__scatterload_rt20x08000139Thumb Code44__scatter.o(!!!scatter)

这些是一些体系的大局符号

Font8x160x08001a82Data2048tft018.o(.constdata)

Font8x80x08002282Data2056tft018.o(.constdata)

codeGB_160x08002a8aData770tft018.o(.constdata)

Region

Table

Base0x08002dc0Number0anon

obj.o(Region

Table)

Region

Table

Limit0x08002de0Number0anon

obj.o(Region

Table)

后边这两个符号我以为很重要,在运行库代码将可履行映像从加载视图转变为可履行视图的进程中起到了关键作用。Number是指它并不占有程序空间,而仅仅一个具有必定数值的符号,类似于程序顶用define和EQU界说的。所以这儿,我先放下map文件的剖析,先经过仿真调试,看这两个数值在程序中怎样用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/256012.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部