新闻中心

EEPW首页>测试测量>设计应用> 嵌入式系统中引导程序的实现

嵌入式系统中引导程序的实现

作者: 时间:2013-04-12 来源:网络 收藏
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操作模块,开发系统监控程序,从而实现应用程序的在线升级。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭