【原创】深入剖析之通过IAR MAP文件查看目标文件内存分配
0赞又是一年五四青年节,也不知道自己还会像现在意气风发多少个青年节,也不清楚自己对技术的执着还会一如既往的坚持多久,总之既然现在依旧坚定不移的“前进”着(前段日子看到奥巴马的竞争口号就是“前进”,说不定跟俺一个境界来,哈哈),未来不可预知,但可规划和争取,把握好现在,莫要虚度光阴,我们年轻并不代表我们有浪费时间的理由~比较推崇特权的那句话,“技术源于积累,成功源于执着”,大家共勉之~
哈哈,感慨发完了,该回归正事了... ...不知道别的地儿方怎么样,总之济南今天天气是格外的好,绿树成荫,草长莺飞的,不写点东西都觉着不舒坦了,我要是文人墨客的话估计早就开始吟诗作对了,不过既然俺是工科技术男,还是写篇技术博客来的实际吧,嘿嘿~
好了,不天气预报了,呵呵,来说说正题吧。本篇算是自己的一篇经验总结吧,这里给大家分享一下,同时也让自己养成文档总结的好习惯。为了具体化问题,我这里还是以IAR开发Kinetis为例深入介绍一下。其实map文件(内存映射文件)可能初手开发的时候甚少有去关注它的,甚至好些都不知道它是干嘛的,呵呵,只有一些有经验的老手或者搞移植搞深入研究的才会去查看它,初手往往上来就是在线调试、查看内存(这个都很少用)、看寄存器、断点(这个用的也少)等等,但是等你了解了map文件,再去完成上述调试的时候会让你事半功倍,且有一种运筹帷幄的感觉都不夸张。哈哈,说的这么多,还是上图介绍吧(俺还是喜欢图文并茂的感觉,话说乔布斯以前在每次开苹果新品展示会的时候,你看见的绝对大多数是图片形式的演讲稿,因为乔大爷深谙这个道理,估计这也是为什么iOS,Mac OS都是UI强大的原因吧):
首先当然要生成map文件了,注意IAR的默认设置是不生成map文件的,我们需要手动设置一下,如下图,然后点击准备就绪之后编译即可在$PROJ_DIR$\FLASH_256KB_PFLASH\List文件夹下找到:
生成之后,我们在IAR环境下打开它(当然可以以记事本直接打开,这里为了更直观),map文件主要由以下几部分构成:
(1)文件头中显示链接器版本,输出文件名,MAP 文件名以及链接器命令行等。
(2)RUNTIME MODEL ATTRIBUTES 部份显示 Endian 等属性;
(3) PLACEMENT SUMMARY 部份显示各sections 在存储器中的分布;
(4)INIT TABLE 部份显示与初始化有关的section tables;