Keil——map文件

1. Image component sizes   

    Code为程序代码部分
    RO-data 表示 程序定义的常量 const temp;
    RW-data 表示 已初始化的全局变量
    ZI-data 表示 未初始化的全局变量

    Code, RO-data,RW-data ..............flash
    RW-data, ZIdata...................RAM
   

    初始化时RW-data从flash拷贝到RAM

2. Section Cross References

    主要是各个源文件生成的模块之间相互引用的关系。

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

    表示:用户在启动代码中调用了__main.o模块中的__main函数

3. Removing Unused input sections from the image

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

    比如:Removing os_mbox.o(.text), (1094 bytes).

4. Image Symbol Table

    Local Symbols

    符号表里的局部符号。

    ../../angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE

    不明白是什么意思?

5. Global Symbols

    全局符号

    _terminate_user_alloc - Undefined Weak Reference

    Region$$Table$$Base 0x08002dc0 Number 0 anon$$obj.o(Region$$Table)

Region$$Table$$Limit 0x08002de0 Number 0 anon$$obj.o(Region$$Table)

后面这两个符号我认为很重要,在运行库代码将可执行映像从加载视图转变为可执行视图的过程中起到了关键作用。Number是指它并不占据程序空间,而只是一个具有一定数值的符号,类似于程序中用define和EQU定义的。所以这里,我先放下map文件的分析,先通过仿真调试,看这两个数值在程序中怎么用。

果然,在刚开始执行程序时,R10和R11的值就已经被赋值成了这两个值。

很快就将0x08002dc0到0x08002dcf处的16个字节,4个双字加载到了R0-R3,我们可以分析一下里面的内容,R0就是程序加载视图的RW区的起始地址(0x08002de0),R1就是要输出的执行视图的RW区的地址(0x20000000),R2就是要复制的RW数据的个数,R3是复制函数 ( __scatterload_copy)的地址,类似于一个回调函数。接下来就要用了:0x0800011E 4718 BX r3这条指令去执行复制工作。

接下来又将0x08002dd0到0x08002ddf处的16个字节,4个双字加载到了R0-R3,我们可以分析一下里面的内容,R0就是程序加载视图的RW区的起始地址(0x08002de0+0x20=0x08002e00),R1就是要输出的执行视图的RW区的地址(0x20000020),R2就是要复制的RW数据的个数,R3是ZI区域建立函数( __scatterload_zeroinit )的地址。


执行完成后,程序就会进入BL.W __rt_entry处进行库的初始化工作。

出处:http://blog.chinaaet.com/detail/2990.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值