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. Day 26 python 正则表达式

    re模块\正则表达式 一.元字符 1.. ^ $ * + ? { } [ ] | ( ) \ "." 代表(任意一个字符) "*" 代表(任意数量任意字符,0- ...

  2. RadioGroup动态添加RadioButton,并且获得事件

    由于有许多的RadioButton是动态的,不是固定的一些,所以需要在代码中,动态的添加到RadioGroup中,下面是我的实现方法. 1.添加RadioButton到RadioGroup中 Radi ...

  3. AC日记——[HAOI2007]理想的正方形 P2216

    [HAOI2007] 理想的正方形 思路: 正解多个单调队列: 但是我用树套树水了过去: 来,上代码: #include <cstdio> #include <cstring> ...

  4. Jmeter(五十)_性能测试模拟真实场景下的用户操作

    概述 我们在做性能测试的时候,不同的视角看到的结果都不一样. 例如响应时间 用户通过客户端向服务端发出请求的时间为: T1服务端接收到请求,处理该请求的时间为:T2服务端返回数据给客户端时间为: T3 ...

  5. 线程安全的单例模式还需要对成员变量的set get方法设置锁么

    不需要,线程安全的单例模式,在获得对象时已经加锁了,保证每时每刻只有一个线程获得此单例对象.所以不需要再上锁了啊

  6. Java Web开发(JSP、Servlet)乱码的一揽子解决方案

    千万不要看网上那些杂七杂八的解决乱码的文章,解决乱码最好的方法是(没有之一):在所有地方统一采用UTF-8编码. 这其中包括: 1 - 工程 如果使用的是Eclipse,那么打开Preference, ...

  7. mysql忘记密码的解决办法

    mysql忘记密码时,需要重设密码. 在Windows下的操作如下: 1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysqld --skip-grant- ...

  8. 用CHttpFile实现简单的GET/POST数据【转】

    一.GET 数据,下载网页,文件等,用于可下载的文件,不能用于服务端运行的程序,比如.aspx文件等,否则会返回500错误. CString strSentence, strWriteName=&qu ...

  9. RMQ(区间求最值)

    1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A.回答若干询问RMQ(A,i,j)(i,j<=n).返回数列A ...

  10. js 考记忆力得小游戏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...