嵌入式体系对功用、可靠性、本钱、体积、功耗等均有严格要求,以ARM体系结构为根底的各种RISC微处理器具有灵敏的特性和强壮的功能,在嵌入式体系中得到了广泛的运用。—S3C2410是三星公司根据ARM920T规划的一款处理器,在开发根据S3C2410的体系的进程中,怎么让体系快速稳定地发动是一个重要问题。嵌入式体系的资源有限,程序一般都是固化在ROM中运转。但在实践运用中,为进步体系的实时性,加速代码的履行速度,体系发动后程序往往要被搬移到RAM中,因为RAM的存取速度要比ROM快得多,这样大大进步体系的功能。发动程序要完结的使命包含:硬件初始化,体系存储体系的装备,仿制二级中止向量表。
发动程序进程
体系硬件初始化
体系上电或复位后,程序从坐落地址0x0的Reset Exception Vec
tor处开端履行,因而需求在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关看门狗定时器,关中止,初始化PLL和时钟,初始化存储器体系。履行完以上程序后,体系进行仓库和存储器的初始化。体系仓库初始化取决于用户运用了哪些中止,以及体系需求处理哪些过错类型。一般情况下,办理者仓库有必要设置,假如运用了IRQ中止,则IRQ仓库也有必要设置。假如体系运用了外设,则需求设置相关的寄存器,以确认其改写频率、总线宽度等信息。
代码段仿制到RAM中运转
因为嵌入式体系的代码一般都是固化在ROM或许Flash中,上电后开端运转。因为ROM和Flash的读取速度相对较慢,这样无疑会下降代码的履行速度和体系的运转功率。为此,需求把体系的代码仿制到RAM中运转。运用SDT链接器ARMLink发生的定位信息,把RO的有用代码和数据段到RAM中。ARMLink将编译后的程序链接成ELF文件。映像文件内部共有三种输出段:RO段、RW段和ZI段。这三种输出段别离包含了只读代码及包含在代码段中的少数数据、可读写的数据、初始化为0的数据,ARMLink一起还发生了这三种输出段的开端和停止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit。能够在程序中运用这些定位信息。将ROM中的代码和数据搬移到RAM中,详细程序如下。
BNE %B0 /*假如没有仿制完,跳转到0标明符处的汇编句子,持续仿制,拜见ARM指令协助手册
树立二级中止向量表
在ARM体系中,中止向量表坐落0X0开端的地址处,意味着不管运转什么样的上层软件,一旦发生中止,程序就得到Flash存储器中的中止向量表里去,下降体系的运转功率。因而在RAM中树立自己的二级中止向量表,当中止发生后,程序直接从RAM中取中止向量进入中止子程序。尤其是在中止频频发生的体系里,这种办法能够大大进步体系的运转功率,详细的完结代码如下
其间HANDLER是一个宏,用于查找中止处理程序的进口地址。这些地址寄存在由HandleXXX指向的表项中,该表定位在RAM高端,基地址为_ISR_STARTADDRESS
MMU的运用
MMU是存储器办理单元的缩写,是用来办理虚拟内存体系的器材。MMU一般是CPU的一部分,自身有少数存储空间寄存从虚拟地址到物理地址的匹配表,此表称作TLB(转化旁置缓冲区)。一切数据恳求都送往MMU,由MMU决议数据是在RAM内仍是在大容量外部存储器设备内。假如数据不在存储空间内,MMU将发生页面过错中止。MMU存储器体系的结构答应对存储器体系的精密操控,大部分的操控细节由存在存储器中的转化表供给。这些表的进口界说了从1KB~1MB的各种存储器区域的特点。MMU完结的两个主要功用是:将虚地址转化成物理地址,操控存储器存取答应。MMU关掉时,虚地址直接输出到物理地址总线。
经过以上的剖析能够发现,体系发动程序主要是完结了硬件的初始化,以及战胜Flash或ROM读取速度慢的缺点,进步指令和数据的读取速度,完结体系的高速运转,而且经过MMU的运用,削减RAM的运用,下降体系本钱。
参考文献
1 S3C2410数据手册
2 ARM920T数据手册
3 王京林.ARM7在嵌入式运用中发动程序的完结