api_segment_init.c)。而在用户程序的lnkarm.xcl文件里可以看到: // put in ram area -Z(CODE)INTVEC=RAMSTART-RAMEND //....ram : put 71x_vect.s in ram -Z(CODE)ICODE=RAMSTART-RAMEND //...ram : put 71x_init.s in ram -Z(CODE)CODE_RAM=RAMSTART-RAMEND //.ram : put 71x_it.c really in ram
// declare in rom place -Z(CODE)CODE_ROM_INTVEC=ROMSTART-ROMEND // declare the rom place for 71x_vect.s -Z(CODE)CODE_ROM_ICODE=ROMSTART-ROMEND // declare the rom place for 71x_init.s -Z(CODE)CODE_ROM=ROMSTART-ROMEND // declare the rom place for 71x_it.c
// transfer from rom to ram -QICODE=CODE_ROM_ICODE // transfer 71x_init.s -QINTVEC=CODE_ROM_INTVEC // transfer 71x_vect.s -QCODE_RAM=CODE_ROM // transfer 71x_it.c
已经隐含调用了动态库完成了拷贝操作。
为何需要手动再次拷贝。难道此刻不能调用动态库吗。不能调用为何要做 // transfer from rom to ram -QICODE=CODE_ROM_ICODE // transfer 71x_init.s -QINTVEC=CODE_ROM_INTVEC // transfer 71x_vect.s -QCODE_RAM=CODE_ROM // transfer 71x_it.c 这样的操作。做这样的操作只是为了看三个段的起始地址和大小吗?以便写api_segment_init.c中init_ram_code()的地址参数吗? __root void init_ram_code() { ... ... ... ... memcpy((char *)0x20000000,(char *)0x40003000,0x428); memcpy((char *)0x20000428,(char *)0x40003428,0x1b8); memcpy((char *)0x200005E0,(char *)0x400038DC,0x144); ... ... ... ... }