在嵌入式系统的开发过程中,技术难点主要在于系统引导程序的编写,为此本文将详细论述在ARM7基础上开发嵌入式系统时引导程序的实现。
引导加载程序是系统加电后运行的第一段软件代码。当一个微处理器最初启动时,他首先执行预定地址处的指令。通常这个位置是只读内存,其中存放着系统初始化或引导程序。在PC系统中,引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的操作系统BootLoader(比如,LILO和GRUB等)一起组成。BIOS进行CPU初始化、配置其他硬件,并完成硬件检测和资源分配。然后,BIOS判断出哪一个磁盘包含有操作系统,再把硬盘MBR中的Boot Loader读到系统的RAM中,然后将控制权交给操作系统BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统,并把控制权交给操作系统,再由操作系统引导其他应用程序。
在嵌入式系统中,通常并没有像BIOS那样的固件程序(注:有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
2 引导程序流程
嵌入式系统的资源有限,程序通常都是固化在ROM中运行。ROM中程序执行前,需要对系统硬件和软件运行环境进行初始化,这些工作由用汇编语言编写的引导程序完成。引导程序是嵌入式程序的开头部分,应与应用程序一起固化在ROM中,并首先在系统上运行。他应包含各模块中可能出现的所有段类,并合理安排他们的次序。写好引导程序是设计好嵌入式程序的关键,系统引导程序所执行的操作依赖于正在开发其软件的系统,一般流程包括:初始化端口,屏蔽中断,把程序拷贝到SRAM中;完成代码的重映射;配置中断句柄,连接到C语言人口,进入应用程序主循环。
3 详细步骤
(1)设置人口指针
引导程序首先必须定义人口指针,而且整个应用程序只有一个入口指针。
(2)设置中断向量
ARM7要求中断向量表必须设置在从。地址开始,连续8X4B的空间。在0x0一Ox000000lc位置放置7条跳转指令,分别实现各种异常处理程序,包括0x00000000:Reset_Handler(复位),0x00000004:Undefined-Handler(未定义指令错误),Ox00000008:SWI_Handler(软件中断),0x0000000C:Prefetch_Handier(预取指令错误),0x00000010:Abort_Handler(数据存取错误),0x00000014:保留的中断向量,0x00000018:IRQ_Handier,[page]0x0000001C:FIQ_Handler。
如果ROM定位于0地址,中断向量表包含一系列指令跳转到中断服务程序,否则向量必须被动态初始化。可以在启动程序中添加一段代码,使其在运行时将向量表拷贝到。地址开始的存储器空间。对于各未用中断,使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。
(3)初始化堆栈和寄存器
程序从Reset_Handler(复位)进入后,先进行相关硬件的初始化操作,如初始化SDRAM,CPU SPEED,InterruptController,UART,Timer等。系统堆栈初始化取决于用户使用了哪些中断,以及系统需要处理哪些错误类型。一般来说管理者堆栈必须设置,如果使用了IRQ中断,则IRQ堆栈也必须设置。如果系统使用了DRAM或其他外设,需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息。
(4)初始化存储器系统
有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有MMU来管理内存空间。
(5)如有必要改变处理器模式、状态
如果应用程序是运行在用户模式下,可在此处将系统改为用户模式并初始化用户堆栈指针。
(6)初始化C语言所需的存储器空间
为正确运行应用程序,在初始化期间应将系统需要读写的数据和变量从ROM拷贝到RAM里;一些要求快速响应的程序,如中断处理程序,也需要在RAM中运行;如果使用Flash,对Flash的擦除和写入操作也一定要在RAM里运行。ARM公司软件开发工具包中的链接器提供了分布装载功能,可以实现这一目的。
(7)呼叫C程序
ARM有两种指令集:16 b Thumb指令集和32 bARM指令集。使用16b的存储器可以降低成本,在这种情况下,Thumb指令集的整体执行速度比ARM 32b指令集快,而且提高了代码密度,所以一般用Thumb编译器将C语言程序编译成16 b的代码。处理器一开始总在ARM状态,可使用BX指令转换到Thumb状态呼叫C程序。要注意的是在用C语言编写嵌入式程序时,要避免使用不能被固化到ROM中的库函数。
4 目标文件的分布装载分析
首先创建一个文本文件,称为分布装载描述文件。他为应用程序的各部分指定装载区间和执行区间。举例如下:
在ARM链接器的命令行里加入“-sCovdescription—file--scl*’或“-scatterdescription-file”,编译链接后,将产生一个分布装载文件。链接器同时产生一组符号,给出每个分布描述文件中命名的区间的长度,装载地址和执行地址。由于链接器和C库都没有将代码从他的装载区间拷贝到执行区间,或创建一个零初始化区域的功能,所以要由应用程序员利用这组符号产生的信息完成这项工作,这是在呼叫C程序之前必须完成的。举例如下;
5 结 语
本文介绍的引导程序已经在SAMSUNG公司的基于ARM7的S3C4510B开发系统上运行并测试通过。还可以在此基础上添加串行通信模块和Flash操作模块,开发系统监控程序,从而实现应用程序的在线升级。
关键字:嵌入式系统 引导程序 中断向量
引用地址:
嵌入式系统中引导程序的实现
推荐阅读最新更新时间:2024-03-30 22:36
物联网时代的嵌入式系统机遇
摘要: 嵌入式系统是物联网平台的半边天。物联网、云计算给嵌入式系统带来新的机遇。单片、嵌入、物联是嵌入式系统的三个基本特性,体现了嵌入式系统的三个时代特征。物联网是多学科的大科技概念,要有多学科视野,嵌入式系统应该用自己的语言来诠释物联网。目前,物联网平台的许多嵌入式技术已经成熟,建设物联网的大型国家工程迫在眉睫。 关键词: 嵌入式系统;物联网;云计算;物联网平台;物联网国家工程 中图分类号: TP39文献标识码: A Age of the Internet of Things: Opportunities for Embedded System He Limin(Beihang University, Beijing 10
[嵌入式]
嵌入式系统中的线性Flash文件系统设计
作者: WuYJ@263.net.cn
摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可方便移植到不同的嵌入式应用中。
在嵌入式系统中,为了便于对闪存(Flash)空间进行管理,会采用文件的形式来访问Flash。目前,可以购买到的Flash文件系统一般都是兼容DOS的文件系统(Flash File System,FFS),这对需要一个具有复杂的目录层次,并且DDS文件兼容的系统来说是必要的;但是对大多数的嵌入式应用来说,这种文件系统太过奢侈。笔者在参与嵌入式系
[嵌入式]
基于CAN总线的分布式嵌入式系统升级方案
嵌入式系统具有智能化程度高、体积小、可靠性高、实时性强等诸多优点,已经越来越多地应用于消费电子、工业控制、汽车电子等各个行业。往往一个大的系统又由许多小的嵌入式系统共同构成,它们之间通过相互通信协同完成各种检测控制任务,构成分布式嵌入式系统。汽车电子系统中的车载GPS、倒车雷达、发动机控制、仪表盘系统等,数控机床中的键盘显示系统、马达控制系统等,这些无一不是嵌入式系统的具体应用。 众多嵌入式系统的应用也为软件升级带来了诸多困难,主要有以下几点: ① 这些系统分处于大系统的各个位置,单独对每个系统进行升级比较困难; ② 某些系统为了满足保密和可靠性的要求,对系统进行了永久密封,只预留了通信和电源端口,这就更不可
[单片机]
在嵌入式系统中用FPGA进行开发的几个发展方向
顾名思义,嵌入式系统指的是嵌入到系统内部的计算机系统,是面向特定应用设计的专用计算机系统。 早期的嵌入式系统一般是以通用处理器或单片机为核心,在外围电路中加入存储器、功率驱动器、通信接口、显示接口、人机输入接口等外围接口,再加上应用软件,有些还加上了嵌入式操作系统,从而构成完整的系统。
随着微电子技术的进步,SoC已经在很多应用中取代了传统的以单片机为中心的架构,将很多外设和存储器集成在一个芯片中,使系统的功耗和体积越来越小,而功能却越来越强。
FPGA在嵌入式系统中的应用前景
现在的MCU和DSP的功能已经非常强了,但处理能力毕竟还是有限的,厂商在推出一款器件的时候,其性能就已经固定了。当某
[嵌入式]
基于Linux的嵌入式实时数据库的设计
在现代化的工业生产现场,产生了大量的生产数据和控制数据,使得嵌入式环境下的数据管理成为工业控制系统中的重要部分,这就要求监控软件必须具备强大的数据处理能力,为人们提供实时、可靠的数据,以反映现场运行的状况,以便进行相应的控制操作。 嵌入式环境中数据的正确性不仅依赖于数据的逻辑结果,而且依赖于逻辑结果产生的时间。如何有效管理这些大量的、时效性强且有严格时序的数据,如何使之以高可靠性、高实时性和大吞吐量的方式进行处理是开发嵌入式系统必须解决的首要问题。 1 实时数据的处理过程 图1嵌入式系统中的数据处理过程 在监控系统中,需要对大量的实时数据进行处理,处理过程包括:现场数据的实时采集;对实时数据进行处理和存储;对结果进行分
[单片机]
嵌入式系统中数字示波器用户图形界面的实现
摘 要: 在嵌入式系统中实现用户图形化(GUI),已经成为大势所趋。本文简要介绍了应用在RIGOL DS1000系列数字示波器上的用户图形界面的实现。重点分析了用户图形界面(GUI)的设计思路。并简单介绍了软件设计结构和流程。
关键词:用户图形界面(GUI);VisualDSP++ 4.0 Kernel;数据结构
1 引言
随着嵌入式系统应用领域的不断扩大,系统复杂性也在不断提高。所以在嵌入式系统中实现用户图形化(GUI),已经成为大势所趋。目前,嵌入式系统中大多数的用户图形化界面(GUI)都是在操作系统(如OS、WinCE、Linix)的支持下, 调用系统的各种API函数实现的。这些操作系统为实现GUI提供了大量的
[应用]
基于BlueZ协议栈的嵌入式系统无线通信实现
1、引言 随着科学技术发展和社会进步,嵌入式系统越来越多的应用到我们的实际生活中,极大的改变着我们的生活。开发低成本、高性能、高可靠性的嵌入式产品正在成为研究的热点。尤其是随着信息化网络化的发展,越来越需要与外部世界进行信息交换,当前主流的数据交换方式都是有线的,但有线通信存在着诸多不足,而无线通信以其无法比拟的灵活性,可移动性和极强的可扩容性正得到越来越广泛的应用。蓝牙技术作为全球统一的无线通信标准,其目的在于建立通用的低功耗、低成本无线电空中接口及其控制软件的公开标准,使通信和计算机进一步结合,使不同厂家生产的便携式设备在没有电线或电缆互相连接的情况下,能在近距离范围内具有互用、互操作的性能。而蓝牙技术在多种智能设备
[单片机]
嵌入式系统的系统测试方法和可靠性评估
引言
随着嵌入式系统硬件体系结构的变化,嵌入式系统的发展趋势向嵌入式系统高端,即嵌入式软件系统转移,具体体现在嵌入式操作系统趋于多样和应用软件日渐复杂。由于嵌入式系统软硬件功能界限模糊,研究如何进行系统测试和进行质量评估来保证嵌入式系统的产品质量具有重要意义。
首先,这里明确嵌入式系统的系统测试定义,是将开发的软件系统(包括嵌入式操作系统和嵌入式应用软件)、硬件系统和其它相关因素(如人员的操作、数据的获取等)综合起来,对整个产品进行的全面测试。嵌入式系统的系统测试比PC系统软件测试要困难得多,主要体现如下:
① 测试软件功能依赖不需编码的硬件功能,快速定位软硬件错误困难;
② 强壮性测
[嵌入式]