查看: 1359|回复: 0

[原创] IAR 开发环境下的.map文件解析

[复制链接]
  • TA的每日心情
    开心
    2023-6-12 14:34
  • 签到天数: 165 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2019-8-30 13:54:04 | 显示全部楼层 |阅读模式
    分享到:
    map文件(内存映射文件)在日常项目开发中有些工程师可能不太关注它,但是等你了解了map文件,会让你在开发和调试的过程中事半功倍。为了具体化问题,这里以IAR EWARM和STM32F107为例来深入地分析一个map文件。
    首先,要在工程设置选项中勾选生成map文件,默认设置是不生成map文件的,我们需要手动设置一下。如下图:
    image1.png
                                  
    之后每次编译会在在“工程目录\Debug\Lis”文件夹下找到以工程名命名的.map文件。在IAR编辑器中打开它(也可以用记事本或者Notepad++等文件编辑器直接打开)。
    另外,也可以在workspace的Output虚拟目录下双击显示的map文件,会自动在IAR编辑器中打开map文件。
    image2.png
         
    map文件主要由以下几部分构成:
    (1).   文件头中显示链接器版本,输出文件名,MAP 文件名以及链接器命令行等。
    (2). RUNTIMEMODEL ATTRIBUTES  显示 Endian等属性;
    (3). PLACEMENTSUMMARY  显示各sections 在存储器中的分布;
    (4). INITTABLE  显示与初始化有关的section tables;
    (5). MODULESUMMARY  显示所有被链接的文件信息,包括目标文件和库文件等;
    (6). ENTRYLIST  给出了所有函数的入口地址及其所在的目标文件。
    (7).   文件尾中显示了总的代码和数据字节数(想看下最后目标代码占用多少Flash和多少RAM的可以从这里查到)。
    下面介绍调试的时候常常会用到的几个部分。
    1.       PLACEMENT SUMMARY,该部分主要显示代码和数据在芯片内部的存储器映射地址。可能会有人疑问为什么会分配到这些地址的呢,其实这些地址分配都是在Linker文件(*.icf文件)里定义好的,IAR根据所选目标芯片就按照该定义的地址进行链接,然后烧写进Flash,具体的地址空间的定义可以查看icf文件说明了解详细内容。
    image3.png
    2.        ENTRY LIST,开发工程内所有函数的入口地址。这部分很有用,通过该地址映射再结合调试的时候观察内存空间,可以了解整个程序的执行状况。
    image4.png
    3MODULE SUMMARY主要概述被链接文件所占ro代码大小、rw数据大小。
    image5.png
    4、 这是map文件末尾部分,最后给出了整个工程文件占用的资源情况,即芯片内部Flash和RAM的使用情况,便于你对工程开发规模上的掌握,最后给出工程编译链接输出信息。
    image6.png

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 04:18 , Processed in 0.116696 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.