




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于LPC2200启动程序分散加载描述文件的叙述 在ADS LPC2200的启动模板中有一个scf文件夹,其中有mem_a.scf、mem_b.scf、mem_c.scf这3个文件,这3个文件是ADS的分散加载机制,其目的是将代码段和数据段分别定位到制定地址上。可以在Arm Linker中选择加载路径。 分散装在技术概述:分散装在技术可以把用户的应用程序分割成多个RO(只读)运行域和RW(可读写)运行域(关于域的概念大家可以在网上查查),并且给它们制定不同的地址。一个嵌入式系统中,Flash、16位RAM、32位RAM都可以存在于系统中,所以,将不同功能的代码定位在特定
2、的位置会大大地提高系统的运行效率。下面是最为常用的2种情况:一、32位的RAM运行速度很快,因此就把中断服务程序作为一个单独的运行域,放在32位的RAM,使它的响应时间达到最快。二、程序在RAM中运行,其效率要远远高于在ROM中运行,所以将启动代码(Boot loader)以外的所有代码都复制在RAM中运行,可以提高运行效率。分散装在技术主要完成了2个基本的功能:如何分散。就是如何将输入段组成输出段和域。如何装载。就是确定装载域和灭个运行域在存储空间里的地址是多少。域可以分为装载域和运行域装载域描述运行前输出段和域在ROM/RAM里的分布状态,运行域描述了运行时输出段和域在ROM/RAM里的分
3、布状态。大多数情况下,映像文件哎执行前把它装载到ROM里,而当运行时,域里的有些输出段(比如RW类型的输出段)必须复制到RAM里,程序才能正常运行,所以,在装载和运行时,RW类的输出段处在不同的位置(地址空间)。Scatterfile分散加载文件:在scatterfile中可以为每一个代码或数据区在装载和执行时指定不同的存储区域地址,Scatlertoading的存储区块可以分成二种类型: 装载区:当系统启动或加载时应用程序的存放区。 执行区:系统启动后,应用程序进行执行和数据访问的存储器区域,系统在实时运行时可以有一个或多个执行块。 映像中所有的代码和数据都有一个装载地址和运行地址(二者可能
4、相同也可能不同,视具体情况而定)。 scatter文件语法 scatter文件是一个简单的文本文件,包含一些简单的语法。 My Region 0x0000 0x1000 ;the context of region 标题 每个块由一个头标题开始定义,头中至少包含块的名字和起始地址,如(0x0000),另外还有最大长度等其他一些属性选项(注:这些属性是可选的,如0x1000)。 内容 块定义的内容包括在紧接的一对花括号内,依赖于具体的系统情况。 一个加载块必须至少含有一个执行块;实践中通常有多个执行块。 一个执行块必须至少含有一个代码或数据段;这些通常来自源文件或库函数等的目标文件;通配符号*可
5、以匹配指定属性项中所有没有在文件中定义的余下部分。有以下几种属性:RO:只读的代码段和常量RW:可以读写的全局变量和静态变量ZI:RW段中要被初始化为零的变量。Scatterfile中的定义要按照系统冲定向后的存储器分布情况进行,在引导程序完成初始化任务后,应该把主程序转移到RAM中运行以加快系统的运行速度。LPC2200分散加载文件分析:ROM_LOAD 0x80000000(1) ROM_EXEC 0x80000000(2) Startup.o (vectors, +First)(3) * (+RO)(4) IRAM 0x40000000(5) Startup.o (MyStacks)(6
6、) STACKS_BOTTOM +0 UNINIT(7) Startup.o (StackBottom)(8) STACKS 0x40004000 UNINIT(9) Startup.o (Stacks)(10) ERAM 0x80040000(11) * (+RW,+ZI)(12) HEAP +0 UNINIT(13) Startup.o (Heap)(14) HEAP_BOTTOM 0x80080000 UNINIT(15) Startup.o (HeapTop)(16) FLASH_LOAD 0x81000000 0x1000(17) FLASH_EXEC 0x81000000(18)
7、main.o (+RO)(19) (1)加载时域描述,名称位ROM_LODA 它的地址为0x80000000;0x80000000为LPC片外RAM地址,即将以下的加载的段和域都在RAM中。(2)第一个运行时域描述。ROM_EXEC描述了执行区的地址,放在第一块定义,其起始地址、空间大小域加载区起始地址、空间大小要一样。(2)-(4)从起始地址开始放置向量表。Startup.o是Startup.s的目标文件。Vectors为中断向量表。模块Startup位于该加载域的开头(+First),vectors作为入口点,包含全部的RO代码。ARM在芯片复位之后,系统进入管理模式、ARM状态,PC(R
8、15)寄存器的值为0x00000000,所以必须保证用户的向量表代码定位在0x00000000处,或者映射到0x00000000处(例如向量表代码在0x80000000处,通过存储器映射,访问0x0000000就是访问0x80000000)。(5)-(6)第二运行时域描述。将MyStacks堆栈段装载到片内静态RAM中。(7)-(8)将栈底放入堆栈的后面(+0)不进行初始化(UNINIT), 栈底为Startup中的StackBottom。(9)-(10) 将栈放入地址为0x40004000 并且不进行初始化(UNINIT)。(11)-(12将所有的RW和ZI段放入外部存储器中以0x80040
9、000为开头的地址中。并且全部清零(+ZI)外部RAM中指定的区域。(13)-(14)在RW ZI段后放入堆底(Startup.o(Heap)并且不进行初始化。(15)-(16)将堆定放入外部RAM中(0x80080000)。(17)-(19)自己添加的加载代码,把main.c的目标文件加载到片外Flash中并且占用了0x1000的大小。绿色通道:好文要顶关注我收藏该文与我联系 Mr Qian关注 - 0粉丝 - 0关注博主00(请您对文章做出评价)« 上一篇:Win CE 6.0在虚拟机上的安装» 下一篇:关于ucGUI+ucOS在LPC2200上的移植posted 20
10、08-11-11 09:51 Mr Qian 阅读(2134) 评论(2) 编辑 收藏评论1367500回复引用 #1楼2008-11-11 22:18 | yyZ未注册用户 你分析的是Bank0-RAM,Bank1-Flash那种情况,我记得他只用到三个分散加载文件中的一个。Bank1-Flash,Bank0-RAM用到另一个文件。还剩下一个,忘记了,好像是有关DebugInChip的。 上面(1)写到:0x80000000为LPC片外RAM地址,这个也应该是在Bank0-RAM,Bank1-Flash情况下才对。我记得基础教程里前两章有一页里标出来Bank0/Ban
11、k1在不同情况下的RAM地址,存储器映像有一节也有地址列表。回复引用查看 #2楼楼主2008-11-12 08:39 | Mr Qian yyZ 恩,你说的对。我分析的这个分散加载文件是这3个文件中使用在JTAG调试的时候用的,这个文件是mem_b.scf,使用的Bank0-RAM,Bank1-Flash,而在进行最终代码固化的时候应该分配为Bank0-Flash,Bank1-RAM。mem_a.scf用在RelOutChip中使用,mem_c.scf用在DebugInChipFlash和RelnC
12、hip。这个加载是在RAM中进行片上调试的。所以使用Bank0-RAM,Bank1-Flash,它的起始地址就在0x80000000处,即片外RAM的地址。在最终进行代码固化时,代码被烧写到Flash中,而这个地址分配使用Bank0-Flash可以用来引导程序运行。分散加载文件 有时候用户希望将不同代码放在不同存储空间,也就是通过编译器生成的映像文件需要包含多个域,每个域在加载和运行时可以有不同的地址。要生成这样的映像文件,必须通过某种方式告知连接器相关的地址映像关系。mem_a.scf对应是片外flash 使程序在FLASH中运行,并且加密mem_b.scf对应是片外RAM 使程序在RAM中
13、运行mem_c.scf对应是片内flash 使程序在FLASH中运行属性 RO:只读的代码段和常量RW:可以读写的全局变量和静态变量ZI:RW段中要被初始化为零的变量ROM_LOAD 0x00000000 (1) ROM_EXEC 0x00000000 (2) Startup.o (vectors, +First) (3) * (+RO) (4) IRAM 0x40000000 (5) Startup.o (MyStacks) (6) *(+RW,+ZI) (7) HEAP +0 UNINIT (8) Startup.o (Heap) (9) STACKS 0x40004000 UNINIT (10) Startup.o (Stacks) (11) (1)加载区,从0x00000000开始。(2)第一个运行时域描述。ROM_EXEC描述了执行区的地址,放在第一块定义,其起始地址、空间大小域加载区起始地址、空间大小要一样。(2)-(4)从起始地址开始放置向量表。Startup.o是Startup.s的目标文件。vector为中断向量表。模块Startup位于加载域的开头(+First),vectors作为入口点,包含全部的r0代码。arm芯片复位后,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国高纯度六氯乙硅烷行业市场分析及投资价值评估前景预测报告
- 2025年中国杠杆式浓缩咖啡机行业市场分析及投资价值评估前景预测报告
- 2025年中国干洗化学品行业市场分析及投资价值评估前景预测报告
- 2025年中国干墙板行业市场分析及投资价值评估前景预测报告
- 2025年中国甘氨酰酪氨酸行业市场分析及投资价值评估前景预测报告
- 03 专题五 牛顿第二定律的综合应用 【答案】听课手册
- 2025年中国枫木行业市场分析及投资价值评估前景预测报告
- 2025年中国非锁定登山扣行业市场分析及投资价值评估前景预测报告
- 高二六门考试题目及答案
- 说课稿:铸牢民族共同体意识
- 维生素D佝偻病课件
- 液压实训安全培训课件
- 义齿行业安全教育培训课件
- 第8课《回忆鲁迅先生》公开课一等奖创新教学设计 统编版语文八年级上册
- 胆结石课件教学课件
- 第2课《中国人首次进入自己的空间站》课件+2025-2026学年统编版语文八年级上册
- 2025年卫生知识健康教育知识竞赛-医疗质量与安全管理知识竞赛历年参考题库含答案解析(5套典型题)
- 多源信息融合技术应用
- 11-特殊焊接与热切割作业安全技术
- 骨科围手术期压疮预防护理
- 2024年事业单位考试四川省甘孜藏族自治州A类《职业能力倾向测验》全真模拟试题含解析
评论
0/150
提交评论