微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM7在嵌入式应用中启动程序的实现

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

时间:11-11 来源:互联网 点击:

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”或“-scatterdescription-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.结束语:

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

上一篇:ARM连接器介绍
下一篇:Bootloader 介绍

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top