`

MDK-ARM 分散加载文件

阅读更多

    Scatter Loading分散加载文件的概念http://www.keil.com/support/man/docs/armlink/armlink_Cegbbcjj.htm

    Image映像文件组成http://www.keil.com/support/man/docs/armlink/armlink_Bhccdacb.htm

 

    ARM映象文件各组成部分在存储系统中的地址有两种:一种是在映象文件位于存储器中时(也就是该映象文件开始运行之前,通俗的说就是下载到Flash中的二进制代码)的地址,称为加载地址;一种是在映象文件运行时(通俗的说就是给板子上电,开始运行Flash中的程序了)的地址,称为运行时地址。赋初值的全局变量和静态变量在程序还没运行的时候,初值是被放在Flash中的,这个时候他们的地址称为加载地址,当程序运行后,这些初值会从Flash中拷贝到RAM中,这时候就是运行时地址了。

 

 

    通过Keil MDK的Build output窗口中Program size项只可查看总的RO,RW,ZI大小,可通过工程名.map文件查看各个文件中各自的RO,RW,ZI大小。

    如果在Output窗口勾选了Debug Information,可以看到生成的带调试信息的axf文件是很大的,但其所含的调试信息是不会在调试的时候被下载到Flash/SRAM中的,参考RealView MDK中生成带调试信息和不带调试信息的AXF文件一文。axf后缀的文件是elf格式文件(在linux下可通过readelf -h或者file命令读出其elf头文件的信息)。hex后缀的文件是不带调式信息的,它被flash programmer直接下载到flash中,并在上电后直接执行,不需要链接/装载器的参与(事实上无OS的系统也无法提供这一机制),因而其不需要elf头文件信息,所以也就不是elf格式的文件。

 

 

 

    Keil中Linker选项卡参数--ro_base 表示RO区域的加载和执行地址,--rw_base 表示RW区域的执行地址,勾选Use Memory Layout from Target Dialog,那么加载文件就是从你定义irom和iram等地址得到的,如果不勾选的话就是通过你自己指定的加载文件来加载。

   

参考http://blog.csdn.net/wangfoquan/article/details/7647011

mbed的内存模型介绍对此也有很清晰的解释http://mbed.org/handbook/Memory-Model

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics