原创 由bootloader看xcl文件

2009-3-28 21:29 4674 6 6 分类: MCU/ 嵌入式

在bootloader的实现中遇到了几点疑惑,怎么实现的引导程序从flash到ram的copy,编译出来的引导程序的地址到底是什么呢? 这一切还得从.xcl文件 和IAR的文档 IAR Linker and Library 说起。
先把程序的.xcl文件贴出来:
------------------------------------------------------------------------------------------------
// Set the CPU type to ARM.
-carm


// Define the size of flash and SRAM. This reserves the first 0x44 bytes of
// flash and SRAM for the vector table.
-DROMSTART=00000044
-DROMEND=0000ffff
-DRAMSTART=20000044
-DRAMEND=2000ffff


// Create a logical to physical mapping of the code and data in SRAM to its
// initial location in flash.
-QCODE=ROMCODE
-QINITTAB=ROMINITTAB
-QDATA_C=ROMDATA_C
-QDATA_ID=ROMDATA_ID


// Place the physical copies of the code and read-only data into flash. The
// vector table is placed at the beginning of flash.
-Z(CODE)INTVEC=0x0-0x43
-Z(CODE)ROMCODE=ROMSTART-ROMEND
-Z(CONST)ROMINITTAB=ROMSTART-ROMEND
-Z(CONST)ROMDATA_C=ROMSTART-ROMEND
-Z(CONST)ROMDATA_ID=ROMSTART-ROMEND


// Place the logical copies of the code and read-only data into SRAM.
-Z(CODE)CODE=RAMSTART-RAMEND
-Z(CONST)INITTAB=RAMSTART-RAMEND
-Z(CONST)DATA_C=RAMSTART-RAMEND
-Z(CONST)DATA_ID=RAMSTART-RAMEND


// Place the zero-init data into SRAM.
-Z(DATA)DATA_Z=RAMSTART-RAMEND
-Z(DATA)DATA_I=RAMSTART-RAMEND
-Z(DATA)DATA_N=RAMSTART-RAMEND


------------------------------------------------------------------------------------------------


-c,-Q, -Z,-D的作用:


-c的作用比较明确,就是确定cpu的类型


-D 用来定义一些常量。


-Q的作用比较复杂,链接器产生一个新段‘initializer_segment’,这个段的内容用segment的内容来填充。这个功能就可以用来实现将RAM中的代码在Flash中做备份,在上电阶段实现将Rom中代码initialize_segment拷贝到ram中的段segment.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条