中电网 click here 加入收藏
设为首页
EN | 繁体
用户:
密码:
          登录      注册
  新闻中心 最新产品 设计应用 在线座谈 紧缺人才培训 研讨会 在线商店 解决方案 电子百科 技术论坛
  首页 新闻中心 最新产品 设计应用 在线座谈 紧缺人才培训 研讨会 电子商城 解决方案 电子百科 博客 技术论坛
空白
 
空白
   您现在所处的位置: 首页 > 嵌入式系统 > Bluetooth > 正文
ARM7在嵌入式应用中启动程序的实现
2008年6月19日 13:47     
作者:赵锐 李德华 胡 伟 石永辉

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

典型的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.详细步骤

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

设置中断向量

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

如果ROM定位于0地址,向量表包含一系列指令跳转到中断服务程序,否则向量必须被动态初始化。可以在启动程序中添加一段代码,使其在运行时将向量表拷贝到0地址开始的存储器空间。

对于各未用中断,使其指向一个只含返回指令的哑函数,以防止错误中断引起系统的混乱。

初始化堆栈和寄存器

系统堆栈初始化取决于用户使用了哪些中断,以及系统需要处理哪些错误类型。一般来说管理者堆栈必须设置,如果使用了IRQ中断,则IRQ堆栈也必须设置。

如果系统使用了DRAM或其它外设,需要设置相关的寄存器,以确定其刷新频率,数据总线宽度等信息。

初始化存储器系统

有些芯片可通过寄存器编程初始化存储器系统,而对于较复杂系统通常集成有MMU来管理内存空间。

⑸ 如有必要改变处理器模式、状态

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

初始化C语言所需的存储器空间。

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

呼叫C程序。

ARM有两种指令集:16位THUMB指令集和32位ARM指令集。使用16位的存储器可以降低成本, 在这种情况下,Thumb指令集的整体执行速度比ARM 32位指令集快,而且提高了代码密度,所以一般用Thumb编译器将C语言程序编译成16位的代码。 处理器一开始总在arm状态,可使用BX指令转换到thumb状态呼叫C程序。要注意的是用C语言编写嵌入式程序时,要避免使用不能被固化到ROM中的库函数。

3.技术难点分析

⑴.MMU的使用
MMU是存储器管理单元的缩写,是用来管理虚拟内存系统的器件。MMU通常是CPU的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表。此表称作TLB(转换旁置缓冲区)。所有数据请求都送往MMU,由MMU决定数据是在RAM内还是在大容量存储器设备内。如果数据不在存储空间内,MMU将产生页面错误中断。
MMU的两个主要功能是:

将虚地址转换成物理地址。

控制存储器存取允许。MMU关掉时,虚地址直接输出到物理地址总线。

在实践中,使用MMU解决了如下几个问题:
①使用DRAM作为大容量存储器时,如果DRAM的行列是非平方的,会导致该DRAM的物理地址不连续,这将给程序的编写调试造成极大不便,而适当配置MMU可将其转换成虚拟地址连续的空间。
②ARM内核的中断向量表要求放在0地址, 对于ROM在0地址的情况,无法调试中断服务程序,所以在调试阶段有必要将可读写的存储器空间映射到0地址。
③系统的某些地址段是不允许被访问的,否则会产生不可预料的后果,为了避免这类错误,可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型。

启动程序中生成的匹配表中包含地址映射,存储页大小(1M,64K,或4K)以及是否允许存取等信息。

例如:目标板上的16兆DRAM的物理地址区间为0xc000,0000~0xc07f,ffff;0xc100,0000~0xc17f,ffff;16兆ROM的虚拟地址区间为:0x0000,0000~0x00ff,ffff。匹配表配置如下:

可以看到左边是连续的虚拟地址空间,右边是不连续的物理地址空间,而且将DRAM映射到了0地址区间。 MMU通过虚拟地址和页面表位置信息,按照转换逻辑获得对应物理地址,输出到地址总线上。

应注意到的是使能MMU后,程序继续运行,但是对于程序员来说程序计数器的指针已经改变,指向了ROM所对应的虚拟地址。

⑵目标文件的分布装载分析

首先创建一个文本文件,称为分布装载描述文件。它为应用程序的各部分指定装载区间和执行区间。

举例如下:
FLASH 0x01000000 0x011fffff ;2M FLASH
 {
FLASH 0x01000000
{
boot.o(BOOT,+First)
* (+RO)
}
DRAM 0x00000000
{
vector.0(VECTOR,+First)
int_handler.o (+RO)
* (+RW,+ZI)
}
}

在ARM链接器的命令行里加入“-scov description-file –scf”或“-scatter description-file”,编译链接后,将产生一个分布装载文件。

链接器同时产生一组符号,给出每个分布描述文件中命名的区间的长度,装载地址和执行地址。由于链接器和C库都没有将代码从它的装载区间拷贝到执行区间,或创建一个零初始化区域的功能,所以要由应用程序员利用这组符号产生的信息完成这项工作,这是在呼叫C程序之前必须完成的,举例如下:

LDR r0, = |Load$$DRAM$$Base|
LDR r1, = |Image$$DRAM$$Base|
CMP r0, r1 ; 检查装载地址和执行地址是否相同
BEQ do_zi_init ; 相同,则不拷贝该区间,初始化零数据区
MOV r2, r1 ; 不相同,将装载区拷贝到执行区
LDR r4, = |Image$$DRAM$$length|
ADD r2, r2, r4
BL copy
do_zi_init
LDR r1, = |Image$$DRAM$$ZI$$Base|
MOV r2, r1
LDR r4, = |Image$$DRAM$$ZI$$length|
ADD r2, r2, r4
MOV r3, #0
BL zi_init ; 调用零初始化子程序

4.结束语

本文介绍的启动程序已经在以Cirrus Logic公司的EP7211和Ateml公司的AT91M40400开发的系统上运行并测试通过。今后可以在这一基础上添加串行通信模块和FLASH操作模块,开发系统监控程序,从而实现应用程序的在线升级。

来源:http://www.chinaeda.cn/show.aspx?id=9818&cid=6
   μC/OS-II在LPC213X上的多种移植方案
   ARM7与FPGA在工控和故障检测中的应用
   ARM9嵌入式系统在励磁调节装置的应用
   Giotto软件在实时嵌入式控制中的应用
   基于构件技术的嵌入式系统复用软件设计
   LwIP协议在μC/OS操作系统中的实现
   VxWorks下的USB驱动程序原理与分析
   Nios系统基础上的UItra DMA数据传输模式
用户名:   密码:   
匿名发表
 
空白
技  术  频  道
        嵌入式系统     电源管理
        3G手机     汽车电子
        数字电视     消费电子
        传感器     通信技术
        工业控制     测试测量
        可编程逻辑     中国RoHS
        DSP与MCU     无源元件
        电子制造     模拟电路
空白
2008年4月10日   10:00-12:00
LaserStreamTM - 采用优化的低功耗设计的新一代导航传感器
座谈公司:Avago
2008年5月20日   10:00-12:00
了解Altera 首推40-nm产品组合
座谈公司:Altera
空白
11月14日:
2007中国电子元件领军厂商评选活动暨“电子元件领军厂商”颁奖仪式
空白
软交换协议  软交换机  资源预留协议
IP层协议   异步传输模式   电动门锁
数据链路交换   ATM地址   流协议ST2
请您来编写词条                     更多>>
传感器与测试技术
化学传感器原理及应用
ZigBee技术及应用
PIC单片机与ZigBee无线网络实战/无线单片机技术丛书(无线单片机技术丛书)
      博客
   nxp-lpc23**学习笔
   资深人士对嵌入式的入门看法
   数字电路一些问答
   HDL设计探究
   PADS新手的一点心得和技巧
   硬件开发之路
     BBS
   异步FIFO结构(极品资料,
   Intel USB2.0 U
   OSBDM的上位机烧写程序,
   如何正确的使用Cyclone
   富士通MB89F202 中文
   C6000 FFT编程指南(
空白
关于我们   |   网站导航   |   广告招商   |   联系方法   |   专家约稿   |   友情链接
许可证号:粤ICP010067
Copyright © 2000-2007 ChinaECNet All Rights Reserved
Tel: 010-82888222, 0755-83243191
Fax: 010-82888220, 0755-83243291