arm scatter loading的剖析及应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM Scatter-Loading 的应用

版本:Rev1.0

2008-04

Team MCUZone

更新记录2008.04.12

文档创建。

ARM Scatter-Loading的应用

-基于A T91SAM7S64与keil

Team MCUZone 本文简述如何在AT91SAM7S64(以下简称为S64)上使用ARM scatter-loading将代码加载到RAM中运行,完成对片上flash的编程。相关代码使用realviewMDK中所带的realview工具链进行编译,重点在scatter loader。

一,准备工作

1.安装软件

对于S64之类的基于ARM的MCU,选用Realview MDK (keil)是个不错的选择,其所带的realview工具链比较强大。遗憾的是,新版本的keil(到2008年4月)不支持RDI接口,只能使用ulink进行调试。如果确实需要使用RDI工具调试,可以安装realview

2.2。使用RV Debugger调试keil生成的axf文件。

下面是realview MDK 3.20的版本说明:

工具链是realview 3.1的版本。

2.安装调试器及相关软件

根据使用的仿真器,安装好仿真器的驱动,以及对应的软件。比如使用ulink,那么接上PC就会自动安装驱动,因为在安装keil的时候就有驱动。如果使用jlink这类仿真器,那么就要安装对应的软件。具体可以参考相关产品的使用说明。

3.获取ARM scatter loader的相关文档

RealView® Compilation Tools Linker and Utilities Guide (ARM DUI 0206H)

ARM Application Note 48 – Scatter Loading (ARM DAI 0048A)

二,ARM Scatter-Loading简介

1.ARM linker

ARM linker将编译生成的.o文件与必要的库函数连接成一个可执行的image,也就是最终在目标板上运行的文件。

在生成image(也被称作映像文件)时,ARM linker(连接器)就需要知道下述信息:

1)分组信息,决定如何将各输入段组织成相应的输出段和域

2)定位信息,决定各域在存储空间中的起始地址

根据image的复杂程度,可以采用两种方法告诉linker这些相关信息。对于image

中地址映射关系比较简单的情况,可以使用命令行(与IDE中的相关选项等价,具

体可以参考ARM linker的文档);对于image中的地址映射关系比较复杂的情况,

可以使用一个配置文件,该文件被称为scatter file。

2.Scatter File

Scatter文件是一个文本文件,它可以用来描述ARM linker生成image是需要的信息。具体来说,在scatter文件中可以指定下列信息:

1)各个加载时域(load region)的加载时起始地址(load address)和最大尺寸

2)各个加载时域的属性

3)从每个加载时域中分割出的运行时域

4)各个运行时域的运行时起始地址(execution address)和最大尺寸

5)各个运行时域的存储访问特性

6)各个运行时域的属性

7)各个运行时域中包含的输入段

编写Scatter文件时需要遵循BNF语法。里面关键字的也在ARM linker的文档中有提及。

三,S64的flash编程

1.S64简介

S64是A TMEL推出的基于ARM7TDMI的微控制器(MCU)。具有64KB片上flash,16KB片上RAM。

详细信息请参考其数据手册。

2.S64的flash

由于S64的flash只有一个plain,那么当试图编程片上flash时,就不能够运行flash 上的代码。为了达到在运行时编程flash的目的,必须将操作flash的代码放置到RAM 里运行。

根据数据手册,在对flash的操作过程中,必须要遵循如下几点:

1) Flash必须以page为单位操作,大小取决于flash,S64是每个page 128字节。

2) Flash在编程之前必须执行擦除操作,这个操作在S64上可以选择为自动完成。

3) 对内部flash的buffer进行操作时,必须以字(32bit,4字节)为单位。

3.S64的flash应用

由于S64的page size小,可以使用片上flash作为小批量数据的存储介质,当作片上EEPROM使用。

下面的例子将演示操作flash的过程,相关代码运行于RAM。

四,编译代码

1. 建立工程

运行keil,建立一个新的工程,目标器件选择S64,当keil提示可以为工程添加启动代码时,选择否,本工程不采用keil提供的启动代码,而是采用自定义的代码来完成。

工程建立完,需要做相关的设置。

首先选择目标器件为S64:

设置频率等参数:

注意当前选择的是ARM模式。

在工程文件下建立一个文件夹,用于保存编译的目标文件,比如output,

Name of Executable就是编译最后生成的文件的文件名字。

选择编译器的相关输出的文件夹,也可以指定到output:

建议选择所有输出,这其中的map文件很重要,可以看到代码连接的相关信息。

User选项卡内可以设置一些用户操作,keil会在相关时段执行这些操作,比如下面的设置:

就会在build完成后自动运行两个用户命令,一个完成bin文件的生成,一个完成axf文件代码大小的显示。在下方的build窗口可看到效果。

相关文档
最新文档