在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.
文章评论(0条评论)
登录后参与讨论