新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 在嵌入式系统中实现从RAM快速引导技术

在嵌入式系统中实现从RAM快速引导技术

作者:中国矿业大学信电学院和纬通信研发中心 孙彦景 马小平 郭星歌时间:2004-07-23来源:收藏
摘    要: 本文以ARM7TDMI为例,对嵌入式系统从ROM和RAM引导的特点及技术实现进行了比较,对异常和中断概念给出了详细的辨析,介绍了如何实现嵌入式系统从RAM快速引导技术。
关键词: 引导;异常向量;中断;堆栈;镜像

前言
嵌入式系统是以各种嵌入式微处理器为内核,运行RTOS的面向应用的计算机控制系统,也是SOC技术的一个重要分支。ARM 是一个IP(知识产权)公司,以arm体系结构为基础的各种RISC 微处理器针对不同应用领域提供了不同的指令集(ARM、THUMB、DSP、XSCALE)可以为各种实时应用提供灵活的选择。
在研制开发基于ARM处理器的嵌入式系统过程中,如何让系统正常快速的启动是一个关键环节,本文主要分析讨论嵌入式系统启动的问题。相关代码以ArmStd2.51IDE环境为参考。

几个相关的概念
Arm/Thumb状态
Arm,Thumb分别是ARM处理器的32/16bits的指令集,对应处理器的两种执行状态。
异常(Exception)
由内/外部源引起的需要处理器干预的一个事件,每种异常模式有自己的特殊功能寄存器,堆栈。处理异常需要保护处理器的当前状态,以便在异常处理后可以恢复执行。当异常发生时,系统强制从固定的地址执行程序,                                                如表1 所示。
无论在Arm/Thumb状态进入异常,处理程序都是在Arm状态下执行,PC->R14和CPSR->SPSR保存PC和处理器状态,返回时CPSR->SPSR,R14->PC。
中断处理
ARM提供了两种中断源IRQ,FIQ,发生中断时,会进入相应的IRQ,FIQ异常模式,然后异常处理程序会识别不同的中断,调用相应的中断服务程序。所以中断只是异常的一个子集。未用中断通常指向一个哑函数。
在嵌入式系统设计中应正确的辨析异常和中断。

系统启动(start-up)
嵌入式系统的应用程序通常都是固化在ROM中运行。通常用汇编语言编写启动程序完成系统硬件和软件运行环境的初始化。启动程序与应用程序一起固化在ROM中。系统在上电和复位会跳到复位异常向量入口地址处。
在目标文件中,代码、数据放在不同的段中。源文件编译链接生成含.data、.text段的目标文件,且链接器生成的.data段是以系统RAM为参考地址,故在系统启动时需要拷贝ROM中的.data段到RAM,以完成对RAM的初始化。拷贝从.text结束位置开始,一般以2kbytes对齐取到下一个2kbytes,确定data的初始位置。这样,就定位.data 、.text段在链接文件中所确定的链接位置。
CPU对ROM或Flash ROM访问速度慢,在一定程度上降低了系统的性能。当ROM在地址0x0时,ARM内核使用ROM 0x0 到0x1c作为异常向量区,那么当异常发生的时候,CPU访问ROM区的入口。我们可以在RAM建立异常向量表镜像,这样可以提高系统的性能(镜像建立)。最优的方法,就是让系统RAM配置在0x0,把初始化程序放在RAM中运行(RAM启动),建立异常向量表的自己对应关系。
为了实现异常的快速处理:
1、 在图2,虚线框中表示的是当RAM在0x0时的情况,这是一种直接对应的关系。直接在向量入口处放置sys_**_handler处理程序。
2、 当ROM在0x0时需要建立了一种镜像的关系。地址指针表示对应的数据存储单元的物理地址,**_hander表示对应的处理程序在ROM的入口。Handle**是物理的存储单元地址,里面放置了处理程序的入口指针。异常发生时经过**_handler---handler**---sys_**_handler的过程。Handler**定义在RAM中。

图1 在文件、ROM、运行时段的分配



图2 ROM/RAM 启动时异常向量表比较



图3 从RAM启动时的过程


启动过程分析
设置异常向量 
ARM7要求中断向量表必须设置在从0地址开始,连续8


关键词: 存储器

评论


相关推荐

技术专区

关闭