KEIL下分散加载文件的使用
 

对于分散加载的概念,在《ARM体系结构与编程》书中第11章有明确介绍。

分散加载文件(即scatter file 后缀为.scf)是一个文本文件,通过编写一个分散加载文件来指定
ARM连接器在生成映像文件时如何分配RO,RW,ZI等数据的存放地址。如果不用SCATTER文件指定,那么
ARM连接器会按照默认的方式来生成映像文件,一般情况下我们是不需要使用分散加载文件的。

但在某些场合,我们希望把某些数据放在指定的地址处,那么这时候SCATTER文件就发挥了非常大的作用
而且SCATTER文件用起来非常简单好用。

举个例子:比如像LPC2378芯片具有多个不连续的SRAM,通用的RAM是32KB,可是32KB不够用,我想把
某个.C中的RW数据放在USB的SRAM中,那么就可以通过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   {}
}

下面是针对LPC2378的USB 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   {}
}

KEIL下分散加载文件的使用(zt)的更多相关文章

  1. Dialog BLE 学习之 修改分散加载文件 (2)

    最近搞Dialog的BLE SDK,发现空间不够了,询问原厂,得知可以通过调整分散加载文件而增加空间,一方面是有42KB+8KB的硬件基础,另一方面是原有的程序限制为38KB+8KB.故顺便学习了下把 ...

  2. C# Winform 未能加载文件或程序集"System.Data.SQLite"或它的某一个依赖项。试图加载格式不正确的程序

    在使用Winform 开发了一个小软件,其中使用了SQLite作为数据库 但在我的Win7 64位系统上却出现了以下错误: System.BadImageFormatException: 未能加载文件 ...

  3. 未能加载文件或程序集“Microsoft.ReportViewer.WinForms 解决办法

    异常信息: 未能加载文件或程序集“Microsoft.ReportViewer.WinForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken= ...

  4. 未能加载文件或程序集“AspNetPager”或它的某一个依赖项。参数错误(转)

    未能加载文件或程序集“AspNetPager”或它的某一个依赖项.参数错误. 看你的的开发框架用的是多少的2.0, 3.0, 3.5, 4.0 那么删除的框架的文件夹也相对应的变化   删除 C:\W ...

  5. asp.net程序集冲突解决笔记(未能加载文件或程序集"XXXXXXXXX")

    先来看张截图.(未能加载文件或程序集”System.Web.Razor“) 先说一下我的情况.(扯蛋的,解决方法还在下面 —> _ < ) 这是 ASP.NET MVC 的东西.老大写了一 ...

  6. 未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到指定的文件。

    一:错误提示 "未能加载文件或程序集"System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyTok ...

  7. 目标平台、活动平台 配置,出现未能加载文件或程序集“xxx”或它的某一个依赖项报错

    今天在做动态加载程序集的时候,发现明明程序集存在的情况下,还是依然报“未能加载文件或程序集“xxx”或它的某一个依赖项报错”的错误,排除了程序和配置的错误后,怀疑是否是环境的问题,于是百度加msdn后 ...

  8. membership 启用 roleManager 抛出异常:未能加载文件或程序集MySql.Web

    在vs2013中新建一个ASP.NET MVC 4 WEB 应用程序,使用“基本”模板.web.config中默认使用forms认证方式,并添加了membership的配置. <roleMana ...

  9. 未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u010259408]

    未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u01025 ...

随机推荐

  1. BusyBox 简化嵌入式 Linux 系统【转】

    转自:http://www.cnblogs.com/hnrainll/archive/2011/06/10/2077393.html BusyBox 的诞生 BusyBox 最初是由 Bruce Pe ...

  2. this关键字、this()、super()

    对于下面的代码怎么区分是哪个对象调用当前方法: Class Banana { void peel(int i); } publci Class BananaPeel { public static v ...

  3. Android 设置图片倒影效果

    首先,贴出效果图: 1.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  4. Apache + mod_wsgi部署webpy应用

    Apache + mod_wsgi部署webpy应用   引用:http://webpy.org/cookbook/mod_wsgi-apache.zh-cn 下面的步骤在Apache-2.2.3 ( ...

  5. codevs——1048 石子归并 (区间DP)

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解       题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并 ...

  6. How To Commit Just One Data Block Changes In Oracle Forms

    You have an Oracle Form in which you have multiple data blocks and requirement is to commit just one ...

  7. 双网卡环境导致Oracle连接异常

    现在就是流行向最高水平看齐,这次项目的部署,好好的SQL Server扔了(有正版授权的企业版,神啊...),逢人就夸:“俺们那上的可是最顶级的Oracle Database System!”.看了看 ...

  8. VS2010 MFC中 使用CListCtrl的排序功能

    list 控件是creat的,不是拖在对话框上的.想使用CListCtrl的排序功能却犯了愁~~~ 还好找到方法,如下: .h文件里:afx_msg void OnLvnColumnclickList ...

  9. Xshell 初次应用

    以前就想安装Xshell,今天终于弄好了,可以在windows下对Linux服务端进行管理. 关于SSH和Xshell的介绍见参考,Linux上安装的是ssh服务端,所以咱们如果希望通过远程访问的方式 ...

  10. 记C++课程设计--学生信息管理系统

                                                                                  C++课程设计--学生信息管理系统     ...