ARM7在嵌入式应用中启动程式的实现

2008-02-23 05:40:05来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


嵌入式系统被定义为:以应用为中央、以电脑技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格需要的专用电脑系统。嵌入式系统的核心部件是各种类型的嵌入式处理器,随着嵌入式系统不断深入到人们生活中的各个领域,嵌入式处理器得到前所未有的飞速发展。

典型的32位RISC芯片──ARM处理器,不论是在PDA,STB,DVD等消费类电子产品中,还是在GPS,航空,勘探,测量等军方产品中都得到了广泛的应用。越来越多的芯片厂商早已看好ARM的前景,如Intel,NS,Ateml,Philips,NEC,CirrusLogic等公司都有相应的产品。在1999年,ARM突破1.5亿个,市场份额超过了50%,已成为业界的龙头。

在我们研制研发基于ARM7的嵌入式系统过程中,发现技术难点主要在于系统启动程式的编写,为此本文周详论述了在ARM7基础上研发嵌入式系

统时启动程式的实现。

1.启动程式流程

嵌入式系统的资源有限,程式通常都是固化在ROM中运行。ROM中程式执行前,需要对系统硬件和软件运行环境进行初始化,这些工作由用汇编语言编写的启动程式完成。启动程式是嵌入式程式的开头部分,应和应用程式一起固化在ROM中,并首先在系统上运行。他应包含进各模块中可能出现的任何段类,并合理安排他们的次序。写好启动程式是设计好嵌入式程式的关键,系统启动程式所执行的操作依赖于正在研发其软件的系统,一般流程如下:

2.周详步骤

⑴配置入口指针


启动程式首先必须定义入口指针,而且整个应用程式只有一个入口指针。

(2)配置中断向量

ARM7需要中断向量表必须配置在从0地址开始,连续8×4字节的空间,分别是复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、IRQ、FIQ和一个保留的中断向量。

假如ROM定位于0地址,向量表包含一系列指令跳转到中断服务程式,否则向量必须被动态初始化。能够在启动程式中添加一段代码,使其在运行时将向量表拷贝到0地址开始的存储器空间。对于各未用中断,使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。

(3)初始化堆栈和寄存器

系统堆栈初始化取决于用户使用了哪些中断,连同系统需要处理哪些错误类型。一般来说管理者堆栈必须配置,假如使用了IRQ中断,则IRQ堆栈也必须配置。假如系统使用了DRAM或其他外设,需要配置相关的寄存器,以确定其刷新频率,数据总线宽度等信息。

(4)初始化存储器系统

有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有MMU来管理内存空间。
⑸ 如有必要改变处理器模式、状态

假如系统应用程式是运行在用户模式下,可在此处将系统改为用户模式并初始化用户堆栈指针。

(6)初始化C语言所需的存储器空间

为正确运行应用程式,在初始化期间应将系统需要读写的数据和变量从ROM拷贝到RAM里;一些需要快速响应的程式,如中断处理程式,也需要在RAM中运行;假如使用FLASH,对FLASH的擦除和写入操作也一定要在RAM里运行。ARM公司软件研发工具包中的链接器提供了分布装载功能,能够实现这一目的。



[1] [2] 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 利用C#远程存取Access数据库[2]

下一篇: 想成为嵌入式程式员应知道的0x10个基本问题 #1

热门词条
热门标签