"); //-->
对于分散加载的概念,在《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 {}
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
提供JTAG调试工具
Intel Flash芯片I28F320C硬件手册
ASML最强EUV碰壁! 台积电喊「太贵」真实盘算曝光
TE Connectivity公布2026财年第二季度财报,销售额同比增长15%,每股收益同比增长超20%,业绩高于预期
模拟电子技术 第二十七讲
ISO120/121的失调电压调整电路图
摩尔线程S5000 + 智源FlagOS:基于原生FP8引擎,Day-0适配DeepSeek-V4
ISO120/121的增益调节电路图
Intel ATCA
模拟电子技术 第二十六讲
对华机器人禁令凸显矛盾:美国厂商仍离不开中国零部件
GCC 中文手册
2026年,塑造下一波EDA创新浪潮的关键趋势
模拟电子技术 第二十四讲
台积电亚利桑那封装厂正式动工,2029年前建成本土产能
菜鸟问个交叉编译linux内核的问题
具有冷端补偿的远程隔离式热电偶变送电路图(ISO102、XTR101)
英特尔新一代AI工作站平台发布:至强600与锐炫Pro B70,解锁本地AI极致效能
模拟电子技术 第二十三讲
环路消除、冷端补偿和高端熄灭的热电偶放大电路图(ISO102、INA101)
模拟电子技术 第二十五讲
Rabbit单片机、核心模块助你快速网络开发
ISO120/121的 信号与电源的基本连接电路图
Franklin C51开发环境v2000
南芯科技发布适用于48V汽车系统的高性能DC-DC
提供JTAG调试工具
车展热闹背后,汽车电子竞争正在往底层走
Electronic Workbench v5.0c 电子电路仿真工作室
Google第8代TPU冲刺ASIC战力
小妹求教,哪位做过usb打印机控制的?