深入剖析之通过IAR MAP文件查看目标文件内存分配 - STM32/8

为了具体化问题,我这里还是以IAR开发Kinetis为例深入介绍一下。其实map文件(内存映射文件)可能初手开发的时候甚少有去关注它的,甚至好些都不知道它是干嘛的,呵呵,只有一些有经验的老手或者搞移植搞深入研究的才会去查看它,初手往往上来就是在线调试、查看内存(这个都很少用)、看寄存器、断点(这个用的也少)等等,但是等你了解了map文件,再去完成上述调试的时候会让你事半功倍,且有一种运筹帷幄的感觉都不夸张。哈哈,说的这么多,还是上图介绍吧(俺还是喜欢图文并茂的感觉,话说乔布斯以前在每次开苹果新品展示会的时候,你看见的绝对大多数是图片形式的演讲稿,因为乔大爷深谙这个道理,估计这也是为什么iOS,Mac OS都是UI强大的原因吧):
 首先当然要生成map文件了,注意IAR的默认设置是不生成map文件的,我们需要手动设置一下,如下图,然后点击准备就绪之后编译即可在PROJDIR\FLASH_256KB_PFLASH\List文件夹下找到:
 生成之后,我们在IAR环境下打开它(当然可以以记事本直接打开,这里为了更直观),map文件主要由以下几部分构成:
(1)文件头中显示链接器版本,输出文件名,MAP 文件名以及链接器命令行等。
(2)
RUNTIME MODEL ATTRIBUTES
部份显示 Endian等属性;
(3)
PLACEMENT SUMMARY
部份显示各sections 在存储器中的分布;
(4)
INIT TABLE
部份显示与初始化有关的section tables;
(5)
MODULE SUMMARY
部份显示所有被连接的文件信息,包括目标文件和库文件等;
(6)
ENTRY LIST
部份给出了所有函数的入口地址及其所在的目标文件。
(7)文件尾中显示了总的代码和数据字节数(
想看下最后目标代码占用多少Flash和多少RAM的可以从这里查到
)。
 本篇就挑出我们在调试的时候常常会考虑到用到的几个部分,当然有兴趣的可以每个部分都可以看看,会让你受益匪浅的,下面就分部分介绍下:
(1)
PLACEMENTSUMMARY
,该部分主要显示目标代码在芯片内部的存储器映射地址,可能会有人疑问为什么会分配到这些地址的呢,其实这些地址分配都是在前文讲的Linker文件(*.icf文件)里预定义好了,IAR根据所选目标芯片就按照该定义分配地址段,然后烧写进Flash,具体段定义可以到大前篇博客icf文件说明详细了解。
(2)
ENTRYLIST
,开发工程内所有函数的入口地址,个人觉着这部分很有用,通过该地址映射再结合调试的时候观察内存空间可以方便整个工程执行情况,让你了若指掌,而且也方便你解读一个陌生程序的功能(例如参考别人的例程,网上的例程之类的),总之个人觉着这个部分用处很大,有心人可以在此处做很大文章。
(3)这是map文件末尾部分,最后给出了整个工程文件占用的资源情况,即芯片内部Flash和RAM的使用情况,便于你对工程开发规模上的掌握,最后给出工程编译链接输出信息。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用IAR开发环境中,为了在STM32F103C8T6上正确启动项目,你需要添加一些文件。首先,你需要将STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\EWARM目录下的4个.icf文件复制到你的工程目录下的bsp目录下。这些.icf文件是链接文件,对于基本的应用来说,这些文件足以满足你的工程需求。但是,如果你的项目需要添加外部RAM,你可能需要修改.icf文件。你可以参考一些文章,比如《STM32stm32f0xx_flash.icf文件的作用详解》和《菜鸟详解iar的icf文件》来了解如何修改.icf文件。复制完文件后,你还需要在选项中修改路径。接下来,你需要添加一些文件。在CORE目录下,你需要添加core_cm3.c和startup_stm32f10x_md.s文件。注意,默认情况下,添加文件文件类型为.c,所以当你添加startup_stm32f10x_md.s启动文件时,你需要选择文件类型为"All files"才能看到这个文件。在USER目录下,你需要添加main.c,stm32f10x_it.c和system_stm32f10x.c文件。这样,你就将需要添加的文件都添加到了你的工程中。最后,点击OK保存设置。如果你还需要添加其他文件,请参考相关文档。 #### 引用[.reference_title] - *1* [IAR基于固件库建立STM32工程](https://blog.csdn.net/qq_36310253/article/details/103591685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【STM32STM32F103C8T6 创建工程模版详解(固件库)](https://blog.csdn.net/dengjin20104042056/article/details/130892452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamingCatcher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值