历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2019年12月19日 | 痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)

2019-12-19 来源:eefocus

  第四节课里,痞子衡给大家介绍了第一种output文件-relocatable文件,本文继续给大家讲project生成的第二种output文件-map文件,map文件记录了很多重要的信息,这对于后续调试有很大帮助。


  文件关系:链接文件(.icf) + 工程文件(.ewp) + 可重定向文件(.o/.a) -> 映射文件(.map)


  痞子衡在第四节课可重定向文件(.o/.a)里分析object文件里的symbol list时讲到由于object文件并没有经过链接,所以所有symbol地址信息是无效的(待分配的),而map文件就是所有relocatable文件经过链接器统一链接后生成的记录链接信息的文件,map文件里可以查到所有symbol在存储器中具体分配地址。话不多说,让我们直接开启map文件分析之旅,以第三节课工程文件(.ewp)里demo工程为例。


一、解析map文件

  在IAR软件选项设置options->Linker->List里选中Generate linker map file,编译链接demo工程可在D:myProjectbspbuildsdemoReleaseList路径下得到demo.map文件。让我们从头到尾逐一分析里面内容:


1.1 工程文件信息

  map文件里第一部分信息记录的是工程文件相关信息,包括工程使用的软件版本,工程编译时间,工程文件目录,工程文件生成文件信息。


###############################################################################

#

# IAR ELF Linker V8.11.2.13589/W32 for ARM                12/Jan/2018  17:37:39

# Copyright 2007-2017 IAR Systems AB.

#

#    Output file  =  D:myProjectbspbuildsdemoReleaseExedemo.elf

#    Map file     =  D:myProjectbspbuildsdemoReleaseListdemo.map

#    Command line =  

#        -f C:UsersBaogeAppDataLocalTempEW5D86.tmp

#        (D:myProjectbspbuildsdemoReleaseObjmain.o

#        D:myProjectbspbuildsdemoReleaseObjreset.o

#        D:myProjectbspbuildsdemoReleaseObjstartup.o

#        D:myProjectbspbuildsdemoReleaseObjstartup_MKL25Z4.o

#        D:myProjectbspbuildsdemoReleaseObjsystem_MKL25Z4.o

#        D:myProjectbspbuildsdemoReleaseObjtask.o -o

#        D:myProjectbspbuildsdemoReleaseExedemo.elf --map

#        D:myProjectbspbuildsdemoReleaseListdemo.map --config

#        D:myProjectbspbuildsdemo/../../linker/iar/KL25Z128xxx4_flash.icf

#        --entry Reset_Handler --inline --vfe --text_out locale)

#

###############################################################################

1.2 系统库使用信息

  map文件里第二部分信息记录的是工程系统库使用情况,由于task.c里调用了malloc()、free()等HEAP相关操作的API,所以自然我们在编译链接工程时会使用到HEAP相关系统库,这里告诉我们用的是DLib里的DLMalloc,而DLMalloc有很多种不同的HEAP实现策略,我们可在options->General Options->Library Option 2->Heap selection指定具体策略,由于demo工程选的是Automatic,也就是让IDE自动选择,这里告诉我们最终用的策略是advanced heap。


*******************************************************************************

*** RUNTIME MODEL ATTRIBUTES

***


CppFlavor       = *

__Heap_Handler  = DLMalloc

__SystemLibrary = DLib

__dlib_version  = 6



*******************************************************************************

*** HEAP SELECTION

***


The advanced heap was selected because the application calls memory

allocation functions outside of system library functions, and there

are calls to deallocation functions in the application.

1.3 各object中Section放置信息

  从map文件第三部分开始,就进入非常有用的信息环节了。第一个重要信息就是section放置信息。我们在第四节课可重定向文件(.o/.a)里分析过单个relocatable文件task.o,task.o里各个基本section都有,但是都并没有分配有效地址,而这里列出了所有relocatable文件统一存储和地址分配信息,从这里我们可以看到,链接器在整合各section的时候,都是以object文件为单位的,这意味着同一个object文件里的同一个section里的对象(变量/函数)在存储空间里的位置也是靠在一起的。

  另外一个有意思的信息是在第二节课链接文件(.icf)里,我们一共有四句block放置语句,在这里section也被分成了四个block:A0,P1,P2,P3。IDE给每个block重命名了,这些重命名的信息将会在第六节课可执行文件(.out/.elf)里被提到。


*******************************************************************************

*** PLACEMENT SUMMARY

***


define block Vectors with alignment = 256 { ro section .intvec };

"A0":  place at start of [0x00000000-0x0001ffff] { block Vectors };

define block CodeRelocate { section .textrw_init };

define block ApplicationFlash { ro, block CodeRelocate };

"P1":  place in [from 0x00000000 to 0x0001ffff] { block ApplicationFlash };

define block CodeRelocateRam { section .textrw };

define block HEAP with size = 1K, alignment = 8 { };

define block ApplicationRam { rw, block CodeRelocateRam, block HEAP };

"P2":  place in [from 0x10002000 to 0x1000ffff] { block ApplicationRam };

define block CSTACK with size = 8K, alignment = 8 { };

"P3":  place in [from 0x10000000 to 0x10001fff] { block CSTACK };

initialize manually with packing = copy, complex ranges { section .data };

initialize manually with packing = copy, complex ranges { section .textrw };


  Section                Kind        Address    Size  Object

  -------                ----        -------    ----  ------

"A0":                                           0x40

  Vectors                         0x00000000    0x40 

    .intvec              ro code  0x00000000    0x40  startup_MKL25Z4.o [1]

                                - 0x00000040    0x40


"P1":                                         0x1a3c

  ApplicationFlash                0x00000040  0x1a3c 

    .noinit              ro code  0x00000040    0x58  reset.o [1]

    .rodata              const    0x00000098     0x4  main.o [1]

    Veneer               ro code  0x0000009c    0x10  - Linker created -

    .text                ro code  0x000000ac    0x20  main.o [1]

    .text                ro code  0x000000cc    0x58  task.o [1]

    .text                ro code  0x00000124  0x16f8  dlmalloc.o [3]

    .text                ro code  0x0000181c    0x50  ABImemset.o [4]

    .text                ro code  0x0000186c    0x5c  ABImemcpy.o [4]

    .text                ro code  0x000018c8     0x8  heaptramp0.o [3]

    .text                ro code  0x000018d0     0xa  abort.o [3]

    .text                ro code  0x000018da     0x2  startup_MKL25Z4.o [1]

    .text                ro code  0x000018dc    0x2c  xgetmemchunk.o [3]

    .text                ro code  0x00001908     0xc  XXexit.o [4]

    .text                ro code  0x00001914    0x90  startup.o [1]

    .text                ro code  0x000019a4     0xc  system_MKL25Z4.o [1]

    .text                ro code  0x000019b0    0x1a  cmain.o [4]

    .text                ro code  0x000019ca     0x2  startup_MKL25Z4.o [1]

    .text                ro code  0x000019cc    0x28  data_init.o [4]

    .text                ro code  0x000019f4     0x8  exit.o [3]

    .text                ro code  0x000019fc     0xa  cexit.o [4]

    .text                ro code  0x00001a06     0x2  startup_MKL25Z4.o [1]

    CodeRelocate                  0x00001a08    0x10 

      Initializer bytes  const    0x00001a08    0x10 

    .data_init                    0x00001a18     0x4 

      Initializer bytes  const    0x00001a18     0x4 

    .text                ro code  0x00001a1c     0x2  startup_MKL25Z4.o [1]

    .text                ro code  0x00001a1e     0x2  startup_MKL25Z4.o [1]

    .text                ro code  0x00001a20     0xc  cstartup_M.o [4]

    .text                ro code  0x00001a2c    0x40  zero_init3.o [4]

    .iar.init_table      const    0x00001a6c    0x10  - Linker created -

    .rodata              const    0x00001a7c     0x0  zero_init3.o [4]

                                - 0x00001a7c  0x1a3c


"P3":                                         0x2000

推荐阅读

史海拾趣

常州星海电子(Starsea)公司的发展小趣事

质量是企业的生命线。常州星海电子自成立以来,便高度重视质量管理体系的建设和完善。公司先后通过了ISO9002、ISO9001:2000、ISO14000等多项国际质量管理体系认证,以及TS16949体系认证。这些认证不仅证明了公司在质量管理方面的卓越实力,也为公司赢得了众多国内外客户的信任和赞誉。

Flexxon Pte Ltd公司的发展小趣事

Flextronics(虚构为Flexxon Pte Ltd)自上世纪90年代末成立以来,便致力于成为全球供应链整合的领军者。公司最初从新加坡起步,迅速在全球范围内建立了多个生产基地和研发中心,以满足客户对电子产品快速响应和高质量生产的需求。通过高效的供应链管理,Flextronics不仅缩短了产品上市时间,还大幅降低了生产成本,赢得了包括惠普、戴尔、诺基亚等国际巨头的信任与合作。

Ferraz Shawmut(Mersen)公司的发展小趣事

Ferraz Shawmut一直致力于技术创新和产品研发。通过不断的技术创新,公司推出了多款具有竞争力的电气保护产品,如熔断器、保险丝等。同时,公司也积极拓展全球市场,目前在全球拥有60个下属企业,6200名雇员,产品远销世界各地。

General Cable公司的发展小趣事
内部设计有抑制噪声的机制,确保信号传输的稳定性和可靠性。
AMI [American Megatrends Inc]公司的发展小趣事
根据应用需求,将YN5103的数据和控制引脚连接到相应的输入或输出设备。例如,数据引脚可能连接到微控制器或其他数据源,控制引脚可能用于接收外部控制信号。
DESCO公司的发展小趣事

面对数字化浪潮和智能制造的兴起,DESCO公司积极拥抱变革。公司投入大量资金引进先进的自动化设备和智能化生产线,提高生产效率和产品质量。同时,DESCO还加强了数字化营销和客户服务体系建设,提升了客户体验和市场响应速度。这些举措使公司在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

好资料“时钟参数shew和jitter介绍”!

这个资料不错,看看很有帮助的!…

查看全部问答>

对中国目前3G的一点看法

3G时代,能否替代原有的固定宽带 2009年元月,中国3张3G牌照发放   电信 cdma2000  推出天翼品牌,声称测试速度已经达到3.3Mbps,年底升级到9Mbps。   联通 WCDMA   声称速度达到7.2Mbps,号称最成熟的3G制式。   ...…

查看全部问答>

问一下 元器件清单的公布问题

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 今年的元器件清单公布时间是29号? 不会提前公布出来么 早点公布也好早点猜题啊?  …

查看全部问答>

论坛来了一位新版主,A_P!!

热烈欢迎A_P,大家有什么问题不要客气啊,这位可是技术大牛~~~~       有请斑竹A_P登场…… ;P 不知道什么时候这位版主才能来,先欢迎下:)…

查看全部问答>

光耦的CTR

用于开关电路,所以必须要是三极管处于深度饱和区. 一般工程师在设计时,IF*CTR=(2~3)Ic,这里取2~3倍是为了处于饱和区.…

查看全部问答>

大型ARM+linux+android嵌入式技术专题公益讲座

华清远见武汉华嵌中心将于2010年4月24日下午1:00-5:00在武汉大学联手ARM中国公司,开展“基于ARM平台的嵌入式系统设计专题讲座”。 详情请点击: http://www.embedhq.org/html/mianfei/2010/0408/382.html…

查看全部问答>

关于 微信号数据采集系统设计的疑问

   本系统侧重点在微信号的采集,通过设计一个微信号采集和分析的系统,通过特定的集成电路对微小信号放大,转变为标准电流信号并能够传输到远端。通过模数转换器将其转换为数字量。利用相应软件对采集到的数字进行修正,使之能够比较准 ...…

查看全部问答>

是不是有个flable工具或框架

能用于wince上,做pushmail 一朋友说他听到过,问我,我也不知道,来问问大家 单词可能拼写错误.thanks!…

查看全部问答>

重开一贴 ---------WinCE6.0 开机画面

各位大侠:     自己定制了一个WinCE6.0 的操作系统,启动时间大约在10秒钟左右,想在CE系统真正起来之前,加一个画面,以免看着不舒服。看帖子发现一般解决都是在eboot 或者OAL层加。不解。问问大家。     我用的Atmel 公司 ...…

查看全部问答>

FLASH存储数据?

请问怎样将数据存放在0X10000后的FLSAH里?…

查看全部问答>