ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:191.42KB ,
资源ID:20770906      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20770906.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM7的Bootloader和分散加载文件笔记Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ARM7的Bootloader和分散加载文件笔记Word格式文档下载.docx

1、但Flash(或其它类型的ROM)的访问速度大大低于RAM,每次产生异常后,都要从Flash(或其它类型的ROM)的异常向量表调转到相应的处理程序,会影响异常的响应速度,因此,系统便提供一种灵活的地址重映射方法,在系统完成必要地初始化以后,将RAM安排到0x0地址处,而将原来位于0x0处的Flash(或其它类型的ROM)安排到其他的地方上去,加快异常的响应速度。 这个过程中最容易出错的地方是如何保证程序执行流程的连续性。因为PC指针最初在Flash里取指令执行,在进行地址重映射以后,Flash(或其它类型的ROM)被安排到其他地址上去了,而当前地址被安排为RAM,如果事先没有对RAM的内容进行

2、正确地设置,在往下取指令执行就会出错,即程序的连续性被存储器地址重映射这种变化所打断。 常用的处理方法是:先将Flash(或其它类型的ROM)的内容全部复制到RAM中,然后再进行地址重映射。此时尽管Flash(或其它类型的ROM)和RAM的物理地址发生了变化,但由于RAM中的内容与原来的Flash(或其它类型的ROM)是一样的,PC指针就可以继续取得正确地指令执行,从而保证了程序流程的连续性。ARM的存储器映射与存储器重映射arm处理器本身所产生的地址为虚拟地址,每一个arm芯片内都有存储器,而这个芯片内的存储器的地址为物理地址。我们写程序的目的是为了利用芯片内的存储器,因此我们要知道存储器的

3、地址,即物理地址,所以虚拟地址和物理地址之间必然存在一定的转换关系,这就是映射。把虚拟地址按照某种规则转换成物理地址的方法就为存储器映射。物理地址表示了被访问的存储器的位置。存储器映射有两种映射规则-大端映射和小端映射。 存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。ARM7TDMI的存储器映射可以有0X000000000XFFFFFFFF的空间,即4G的映射空间,但所有器件加起来肯定是填不满的。一般来说, 0X0000

4、0000依次开始存放FLASH0X00000000,SRAM0X40000000,BOOTBLOCK,外部存储器 0X80000000,VPB(低速外设地址,如GPIO,UART)0XE0000000,AHB(高速外设:向量中断控制器,外部存储器控制器) 从0XFFFFFFFF回头。他们都是从固定位置开始编址的,而占用空间又不大,如AHB只占2MB,所以从中间有很大部分是空白区域,用户若使用这些空白区域,或者定义野指针,就可能出现取指令中止或者取数据中止。由于系统在上电复位时要从0X00000000 开始运行,而第一要运行的就是厂家固化在片子里的BOOTBLOCK,这是判断运行哪个存储器上的程

5、序,检查用户代码是否有效,判断芯片是否加密,芯片是否IAP(在应用编程),芯片是否ISP(在系统编程),所以这个BOOTBLOCK要首先执行。而芯片中的BOOTBLOCK不能放在FLASH的头部,因为那要存放用户的异常向量表的,以便在运行、中断时跳到这来找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,厂家为了BOOTBLOCK在芯片中的位置固定,就在编址的2G靠前编址的位置虚拟划分一个区域作为BOOTBLOCK 区域,这就是重映射,这样访问2G即0X80000000的位置时,就可以访问到在FLASH尾部的BOOTBLOCK区了。

6、BOOTBLOCK运行完就是要运行用户自己写的启动代码了,而启动代码中最重要的就是异常向量表,这个表是放在FLASH的头部首先执行的,而异常向量表中要处理多方面的事情,包括复位、未定义指令、软中断、预取指中止、数据中止、IRQ(中断) ,FIQ (快速中断),而这个异常向量表是总表,还包括许多分散的异常向量表,比如在外部存储器,BOOTBLOCK,SRAM中固化的,不可能都由用户直接定义,所以还是需要重映射把那些异常向量表的地址映到总表中。为存储器分配地址的过程称为存储器映射,那么什么叫存储器重映射呢?为了增加系统的灵活性,系统中有部分地址可以同时出现在不同的地址上,这就叫做存储器重映射。重映

7、射主要包括引导块“Boot Block”重映射和异常向量表的重映射。1.引导块“Boot Block”及其重映射Boot Block是芯片设计厂商在LPC2000系列ARM内部固化的一段代码,用户无法对其进行修改或者删除。这段代码在复位时被首先运行,主要用来判断运行哪个存储器上面的程序,检查用户代码是否有效,判断芯片是否被加密,系统的在应用编程(IAP)以及在系统编程功能(ISP)等。Boot Block存在于内部Flash,LPC2200系列大小为8kb,它占用了用户的Flash空间,但也有其他的LPC系列不占用FLash空间的,而部分没有内部Flash空间的ARM处理器仍然存在Boot B

8、lock。重映射的原因:Boot Block中有些程序可被用户调用,如擦写片内Flash的IAP代码。为了增加用户代码的可移植性,所以最好把Boot Block的代码固定的某个地址上。但由于各芯片的片内Flash大小不尽相同,如果把Boot Block的地址安排在内部Flash结束的位置上,那就无法固定Boot Block的地址。为了解决上面的问题,于是芯片厂家将Boot Block的地址重映射到片内存储器空间的最高端,即接近2Gb的地方,这样无论片内存储器的大小如何,都不会影响Boot Block的地址。因此当Boot Block中包含可被用户调用的IAP操作的代码时,不用修改IAP的操作地

9、址就可以在不同的LPC系列的ARM上运行了。2.异常向量表及其重映射ARM内核在发生异常后,会使程序跳转到位于0x00000x001C的异常向量表处,再经过向量跳转到异常服务程序。但ARM单条指令的寻址范围有限,无法用一条指令实现4G范围的跳转,所以应在其后面的0x00200x003F地址上放置跳转目标,这样就可以实现4G范围内的任意跳转,因此一个异常向量表实际上占用了16个字的存储单元。以下为一张中断向量表: LDR PC, ResetAddr PC, UndefinedAddr PC, SWI_Addr PC, PrefetchAddr PC, DataAbortAddr DCD 0xb9

10、205f80 PC, PC, #-0xff0 PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD SoftwareInterrupt PrefetchAddr DCD PrefetchAbort DataAbortAdd DCD DataAbort Nouse DCD 0 IRQ_Addr DCD FIQ_Addr DCD FIQ_Handler由于ARM处理器的存储器结构比较复杂,可能同时存在片内存储器和片外存储器等,他们在存储器映射上的起始地址都不一样,因此ARM内核要访问的中断向量表可

11、能不在0x00000x003F地址上,因此采用了存储器重映射来实现将存在与不同地方的中断向量表都映射到0x00000x003F地址上。注意:Boot Block 也存在中断向量表,而且复位后这段代码首先映射到 0x00000x003F地址上,也就是说复位后首先运行的是Boot Block程序。各个存储区域的中断向量表也不尽相同。1.4 初始化堆栈因为ARM有7种执行状态,每一种状态的堆栈指针寄存器(SP)都是独立的(注意System和User模式使用同一个SP)。所以,对程序中需要用到的每一种模式都要给SP定义一个堆栈地址。方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,然后给SP赋

12、值。不要切换到User模式进行User模式的堆栈设置,因为进入User模式后就不能再操作CPSR回到别的模式了,可能会对接下去的程序执行造成影响。1.5 初始化用户执行环境主要包括初始化临界I/O设备,初始化应用程序执行环境,改变处理器的运行模式和状态,使能中断4部分。初始化临界I/O设备。临界I/O设备是指哪些使能中断之前必须进行初始化的设备。如果不对这些设备进行必要的初始化,它们可能会在使能中断后产生一些没有意义的中断请求,从而影响程序的运行。初始化应用程序执行环境。程序代码通过编译、链接后生成可执行映像文件,一个ARM映像文件由RO,RW和ZI三个段组成,其中RO为代码段,RW是已初始化

13、的全局变量,ZI是未初始化的全局变量。映像一开始总是存储在ROMFlash里面的,其RO部分即可以在ROMFlash里面执行,也可以转移到速度更快的RAM中执行;而RW和ZI这两部分是必须转移到可写的RAM里去。所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零。改变处理器的运行模式和状态。ARM微处理器在复位或上电状态下的默认模式为系统管理模式,而在初始化代码中可能需要切换到其它模式进行必要的操作,如初始化各个模式下的堆栈指针寄存器。因此,在系统的初始化过程中处理器模式一般会经历如图2所示的变化。同时,ARM微处理器在复位后总是处于ARM状态,对于兼容Thumb

14、指令的处理器如果应用程序的入口点对应Thumb指令,则必须将微处理器切换到Thumb状态。使能中断。如果系统需要使用中断,初始化代码应该使能中断。中断使能可以通过清除CPRS中的中断禁止位来完成。1.6 呼叫主应用程序当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序。如果主应用程序是由C代码编写,可以通过以下两种方式进入C代码运行,最简单的情况如下:IMPORT C_Entry ;定义一个外部标号,最好不使用mainB C_Entry ;跳转到该处执行在ARM的ADS编译环境中,还另外提供了一种进入C代码的机制:IMPORT _mainB _main_main()是编译器提供的一

15、个函数,负责完成库函数的初始化和对C代码运行环境的初始化,最后自动调转到main()函数执行,此时应用程序的主函数名必须是main()。用户可以根据需要选择是否使用main()函数,如果想让系统自动完成初始化过程,可以使用main()函数;如果所有的初始化过程都由用户自己完成,则不使用main()。ADS下的分散加载文件应用实例load_region_name start_address | +offset attributes max_size execution_region_name attributesmax_size module_select_pattern ( ( input_s

16、ection_attr | input_section_pattern) (, input_section_attr | input_section_pattern) * ) 加载区(load_region):指用来保存永久性数据(程序和只读变量)的区域;执行区(execution_region):程序执行时所表现出来的区域;程序执行时,从加载区域将数据复制到执行区;load_region_name(加载区域名): 用于Linker区别不同的加载区域,最多31个字符;start_address:起始地址;+offset:前一个加载区域尾地址offset,做为当前的起始地址,且offset为0或

17、4的倍数;attributes: PI 与地址无关 RELOC 重新部署 OVERLAY 覆盖,允许多个可执行区域在同一个地址,ADS不支持 ABSOLUTE 绝对地址(默认)max_size:该加载区域的大小;execution_region_name:执行区域名;链接是目标存放的地址,必须字对齐;同上; 覆盖 FIXED 固定地址 UNINIT 不用初始化该区域的ZI段module_select_pattern:目标文件滤波器,支持通配符“*”和“?”;*.o匹配所有目标,* (或“.ANY”)匹配所有目标文件和库。input_section_attr:每个input_section_at

18、tr必须跟随在“”后;且大小写不敏感; RO-CODE或CODE RO-DATA或CONST RO或TEXT, selects both RO-CODE and RO-DATA RW-DATA RW-CODE RW或DATA, selects both RW-CODE and RW-DATA ZI或BSS ENTRY, that is a section containing an ENTRY point. FIRST,用于指定存放在一个执行区域的第一个或最后一个区域 LAST,同上input_section_pattern:段名;汇编中指定段: AREA vectors, CODE, REA

19、DONLYC中指定段:#pragma arm section sort_type=name ,sort_type=*sort_type: code rwdata rodata zidata如果“sort_type”指定了但没有指定“name”,那么之前的修改的段名将被恢复成默认值。#pragma arm section将恢复所有段名为默认值。一般应用:#pragma arm section rodata = sram, code =.此间的“rodata”和“code”将定位在“sram”段中。#pragma arm section程序中对某区域的引用方法:Load$region_name$B

20、ase Load address of the region.Image$region_name$Base Execution address of the region.Image$region_name$Length Execution region length in bytes (multiple of 4).Image$region_name$Limit Address of the byte beyond the end of the execution region.Image$region_name$ZI$Base Execution address of the ZI out

21、put section in this region.Image$region_name$ZI$Length Length of the ZI output section in bytes (multiple of 4).Image$region_name$ZI$Limit Address of the byte beyond the end of the ZI output sectionin the execution region.SectionName$Base Input Address of the start of the consolidated section called

22、 SectionName.SectionName$Limit Input Address of the byte beyond the end of the consolidated section called SectionName.Base:首地址;Limit:尾地址;region_name:RO、RW、ZI、load_region_name、execution_region_name;例如:RAM1区域的首地址:Image$RAM1$Basesram段首地址: sram$Base“sram$Base”不一定等于“Image$RAM2$Base”;实例: 起始地址 大小ROM: 0x00

23、000000 256K 0x1fc 保留为加密字RAM 0x40000000 16KSRAM 0x80000000 512K程序在ROM中运行;RAM主要用于程序堆栈及优先用于存放部分变量;SRAM速度慢,主要用于存放大的数据表。LOAD_ROM1 0x00000000 ; 指定该加载区域首地址 EXEC_ROM1 +0 0x1f8 没有前一加载区域,所以该执行区域首地址为加载去首地址 并指定该区域长度 Startup.o (vectors, +FIRST) 目标文件的vectors段放在该执行区域的第一段 irq.o (+RO) 目标文件的所有 RO段放在该执行区域 swi.o (+RO)LOAD_ROM2 0x00000200 第二个加载区域 EXEC_ROM2 0x3e600 * (+RO) 所有目标文件和库文件中的 RO段存放在该区域 RAM1 0x4000 * (+RW, +ZI) 所有目标文件和库文件的 RW和 ZI段存放在该区域 SRAM2 0x80000 * (sram) 所有目标文件中的 sram段存放在该区域实例二:Load_region1 0x1fc +0 Startup.o (vectors, +FIRST) irq.o (+RO)Load_region2 0x00000200 0x3e600

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1