通信人家园

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  上等兵

注册:2008-1-9
跳转到指定楼层
1#
发表于 2016-9-29 08:52:24 |只看该作者 |倒序浏览
对于分散加载的概念,在《ARM体系结构与编程》书中第11章有明确介绍。
分散加载文件(即scatter file 后缀为.scf)是一个文本文件,通过编写一个分散加载文件来指定
ARM连接器在生成映像文件时如何分配RO,RW,ZI等数据的存放地址。如果不用SCATTER文件指定,那么
ARM连接器会按照默认的方式来生成映像文件,一般情况下我们是不需要使用分散加载文件的。
但在某些场合,我们希望把某些数据放在指定的地址处,那么这时候SCATTER文件就发挥了非常大的作用
而且SCATTER文件用起来非常简单好用。
举个例子:比如像LPC2378芯片具有多个不连续的SRAM,通用的RAM32KB,可是32KB不够用,我想把
某个.C中的RW数据放在USBSRAM中,那么就可以通过SCATTER文件来完成这个功能。
下面是就这个例子作的说明:

这是一个标准的常用的分散加载文件,现在加注释于后,方便以后查阅:
;******************************************************************************
;
;                         SCATTER LOADING DESCRIPTION
;                                    ARM
;                             KEIL's uVision3
;                   (RealView Microprocessor Developer Kit)
;
; Filename      : LPC2378_Flash.scat
;******************************************************************************
LR_IROM1 0x00000000 0x00080000    ;; 第一个加载域,名字为LR_IROM1,起始
{                  ;;地址为0x0,大小为0x80000
    ER_IROM1 0x00000000 0x00080000 ;;加载域中的运行时域,名字为ER_IROM1
    {          ;; 起始地址为0x0,大小为0x80000
        vectors.o (VECT, +First)    ;;vectors.c编译后生成的文件vectors.o中的代码
        init.o (INIT)               ;;以及init.o中的代码   
        * (+RO)                     ;;以及所有编译生成的RO属性的代码全部存放在
    }                               ;;运行时域ER_IROM1指定的地址范围内,存放方式:顺序存放
    RW_IRAM1 0x40000000 0x0000e800  ;;这是第二个运行时域,功能同上
    {                                   ;;其中 *是代表具有()里面指定的属性的全部数据
        *(+RW,+ZI)                  ;;*功能相似的有.ANY,后面说明
    }                                                           ;; The following declarations select the "two region model" ;
   
                                                              ;; A default __user_initial_stackheap() will be used        ;
    ARM_LIB_HEAP 0x40007000 EMPTY 0x00000100   {}     ;;指定堆栈地址
    ARM_LIB_STACK 0x40008000 EMPTY -0x00000E00   {}
}

下面是针对LPC2378USB SRAM作数据RAM使用的配置:
;******************************************************************************
;
;                         SCATTER LOADING DESCRIPTION
;                                    ARM
;                             KEIL's uVision3
;                   (RealView Microprocessor Developer Kit)
;
; Filename      : LPC2378_Flash.scat
;******************************************************************************
LR_IROM1 0x00000000 0x00080000    ;; 第一个加载域,名字为LR_IROM1,起始
{                  ;;地址为0x0,大小为0x80000
    ER_IROM1 0x00000000 0x00080000 ;;加载域中的运行时域,名字为ER_IROM1
    {          ;; 起始地址为0x0,大小为0x80000
        vectors.o (VECT, +First)   
        init.o (INIT)
        * (+RO)
    }
    RW_IRAM1 0x40000000 0x0000e800
    {
        .ANY(+RW,+ZI)     ;; 此处.ANY替换原来的*,是因为下面的一个执行域对指定的模块中的RW,ZI数据指定了存放地址
                                ;;.ANY就可以把已经被指定的具有RW,ZI属性的数据排除
    }                                                           ;; The following declarations select the "two region model" ;
   
WEBRPGRADE 0x7fd00000 0x1fff
{
   webupgrade.o(+RW,+ZI)     ;;webupgrade.o文件中所有变量都存在USB SRAM
}
                                                             ;; A default __user_initial_stackheap() will be used        ;
    ARM_LIB_HEAP 0x40007000 EMPTY 0x00000100   {}
    ARM_LIB_STACK 0x40008000 EMPTY -0x00000E00   {}
}

举报本楼

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

手机版|C114 ( 沪ICP备12002291号-1 )|联系我们 |网站地图  

GMT+8, 2024-11-19 23:17 , Processed in 0.218200 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部