版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM Scatter-Loading 的应用 2008-04Team MCUZone文档创建。ARM Scatter-Loading的应用-基于A T91SAM7S64与keilTeam MCUZone 本文简述如何在AT91SAM7S64(以下简称为S64上使用ARM scatter-loading将代码加载到RAM中运行,完成对片上flash的编程。相关代码使用realviewMDK中所带的realview工具链进行编译,重点在scatter loader。一,准备工作1.安装软件对于S64之类的基于ARM的MCU,选用Realview MDK (keil是个不错的选择,其所带的real
2、view工具链比较强大。遗憾的是,新版本的keil(到2008年4月不支持RDI接口,只能使用ulink进行调试。如果确实需要使用RDI工具调试,可以安装realview2.2。使用RV Debugger调试keil生成的axf文件。下面是realview MDK 3.20的版本说明: 工具链是realview 3.1的版本。2.安装调试器及相关软件根据使用的仿真器,安装好仿真器的驱动,以及对应的软件。比如使用ulink,那么接上PC就会自动安装驱动,因为在安装keil的时候就有驱动。如果使用jlink这类仿真器,那么就要安装对应的软件。具体可以参考相关产品的使用说明。3.获取ARM scat
3、ter loader的相关文档RealView® Compilation Tools Linker and Utilities Guide (ARM DUI 0206HARM Application Note 48 Scatter Loading (ARM DAI 0048A二,ARM Scatter-Loading简介1.ARM linkerARM linker将编译生成的.o文件与必要的库函数连接成一个可执行的image,也就是最终在目标板上运行的文件。在生成image(也被称作映像文件时,ARM linker(连接器就需要知道下述信息:1分组信息,决定如何将各输入段组织成相应的
4、输出段和域2定位信息,决定各域在存储空间中的起始地址根据image的复杂程度,可以采用两种方法告诉linker这些相关信息。对于image中地址映射关系比较简单的情况,可以使用命令行(与IDE中的相关选项等价,具体可以参考ARM linker的文档;对于image中的地址映射关系比较复杂的情况,可以使用一个配置文件,该文件被称为scatter file。2.Scatter FileScatter文件是一个文本文件,它可以用来描述ARM linker生成image是需要的信息。具体来说,在scatter文件中可以指定下列信息:1各个加载时域(load region的加载时起始地址(load ad
5、dress和最大尺寸 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
6、时,就不能够运行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使用。下面的例子将演示操作f
7、lash的过程,相关代码运行于RAM。四,编译代码1. 建立工程运行keil,建立一个新的工程,目标器件选择S64,当keil提示可以为工程添加启动代码时,选择否,本工程不采用keil提供的启动代码,而是采用自定义的代码来完成。工程建立完,需要做相关的设置。首先选择目标器件为S64: 设置频率等参数: 注意当前选择的是ARM模式。在工程文件下建立一个文件夹,用于保存编译的目标文件,比如output, Name of Executable就是编译最后生成的文件的文件名字。选择编译器的相关输出的文件夹,也可以指定到output: 建议选择所有输出,这其中的map文件很重要,可以看到代码连接的相关信
8、息。User选项卡内可以设置一些用户操作,keil会在相关时段执行这些操作,比如下面的设置: 就会在build完成后自动运行两个用户命令,一个完成bin文件的生成,一个完成axf文件代码大小的显示。在下方的build窗口可看到效果。C/C+窗口可以指定C/C+编译器的一些参数,比如优化级别,常量定义(define,头文件路径(Include Paths,用户也可以指定命令行参数(Misc Controls: ASM选项卡用来指定汇编器的相关参数: 使用Scatter-loading需要设置好Linker选项卡: 具体上来说,就是不选择Use Memory Layout from Target
9、Dialog,然后指定一个Scatter File,Misc Controls里面可以输入一些link的参数。设置完成后可以编写或者添加相关的代码到工程。2. Scatter-Loading文件编写方便起见,可以将scatter file添加到工程里面,如下: 注意这样添加近来的文件将会被编译,而目前的scatter file还不需要被编译处理,因此需要修改其属性: 将文件类型改成txt: 确定后,文件上的编译处理箭头消失: Scatter file 的具体内容如下: 整个imgae只有一个load region,也就是说在代码还没运行的时候,image在flash 上是连续存放的: 而在代码
10、运行时,其内存分布看上去应该如下: 一部分代码在flash上运行,一部分代码在RAM里运行。注意:由于此时flash上的代码并没有擦除,因此flash上还能看到和加载的时候一样的代码存放,只是其它的和运行无关,因此图上没有再标出。可以想象到,RAM在开机时没有代码,要让代码在RAM里面运行,就必须有一个copy的过程,否则当调用flash.o中的代码时,PC跳到RAM内执行,会由于取不到正确的代码而abort。这个copy的过程可以在启动代码中完成,因为link会输出相关段的信息。上面两幅图中标识了link提供的一些段的符号信息。根据这些信息,可以书写如下的copy代码: 可以看到,在获得了相
11、关段的地址后,代码的工作就是复制数据而已。Debug选项卡里可以设置debug的相关信息: 可以指定一个初始化文件,以在debug之前完成一些配置,如上图的ROMstart.ini。Utilities选项卡里面可以设置flash编程工具,注意勾选Update Target before Debugging,这样可以在debug之前自动更新flash。 3. 编译代码在写好代码框架后,可以先行编译,剔除语法错误,build成功后就会在output文件夹下输出map文件,从这个文件就可以看到image的各方面信息,包括符号的地址,各段的地址以及段的大小。 从上面的输出可以看到相关代码在内存中的分布
12、。Flash.o中的代码被置于RAM中: 五,调试代码编写代码完成,编译后将代码下载到flash。如果采用ulink调试,那么在keil下面可以直接将代码下载到flash。如果采用不带下载功能的仿真器,必须先使用第三方工具将代码下载到flash中,比如SAM-BA。下面以使用RVD中的调试为例,说明调试的过程。在keil中调试直接选择debug即可,具体请参考本站的ulink说明文档。六,一些事项1当在无OS的裸机上开发程序时,初始化运行环境的代码很重要,比如:各种模式堆栈指针的初始化;将代码和RW data从ROM拷贝到RAM;初始化.bss段(zeroinitialized空间等。此时会有大量的内存操作,如果enable了Cache,那么在拷贝完代码之后,一定要invalidate ICache和flush DCache。否则将会出现缓存中的代码或数据与内存中的不一致,程序跑飞。2对硬件的操作要小心。很多寄存器值都是被硬件改变的,读写时,要保证确实访问到它的地址。首先,在C语言代码中声明为volatile变量,以防止内存读写被编译器优化掉;另外,设置好TLB,使得寄存器映射的地址空间不被缓存。总之,需要保证cache中的数据和主内存中的一致性。3程序员应当很清楚自己的程序中,那里有大量的运算,哪里有无数的循环或递归,而这正是Cache的用武之地,将这些空间进行缓存将大大提高运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学年度团总支工作计划
- 幼师下半年实习工作计划
- 幼儿园小班第一学期工作计划集合
- 2024年保育老师个人工作计划范文
- 2024年月规划部工作计划
- 2024市场部经理工作计划范文
- 2024学生个人简短工作计划范文
- 工作计划产品销售计划
- 企业销售人员工作计划
- 我新学期学习计划作文
- (高清版)DZT 0388-2021 矿区地下水监测规范
- 直播带货主播培训课件
- 新潮传媒行业分析
- 2023-2024学年高考英语专项真题练习-名词性从句(附解析)
- 小学数学面积单位换算练习200题附答案
- 消防工程投标方案(技术标)
- 企业IT数字化运维运营平台(总体架构、总体蓝图)建设方案
- T-SHNA 0003-2023 消化内镜诊疗前消化道准备
- 江西省南昌市2023-2024学年八年级上学期12月月考英语试题
- 音乐学艺术指导大学生职业生涯规划
- 《二维材料的未来》课件
评论
0/150
提交评论