我想清理一些代码,其中a.c文件包含在另一个b.c文件中。 我想用整个项目构建a.c文件,以便该项目中的所有文件都可以访问a.c文件中定义的函数。
使用整个项目构建a.c文件后,我没有得到任何编译时错误。但是,只要我从另一个文件中调用a.c文件中定义的任何函数,我就会出现arm链接错误。
************* Linking
armlink : error L6291: Cannot assign Fixed Execution Region Load Address:.
Load Address must be greater than or equal to next available Load Address:.
armlink : Not enough information to produce a SYMDEFs file.
armlink : Finished: 1 information, 0 warning and 1 error messages.
make[1]: *** [common.axf] Error 1
make[1]: Leaving directory `/scripts'
make: *** Error 2
在.c中调用函数的文件驻留在SRAM中。虽然a.c驻留在DRAM中。如果我从也驻留在DRAM中的文件调用该函数,我不会收到链接错误。
以下是生成的地图文件:
函数在a.c中没有从调用文件调用。调用文件驻留在SRAM中:
0x0000faa8 0x00000008 Code RO 5150 i.time__delay_ticks rtos.o
0x0000fab0 0x00000008 Code RO 5203 sram_code_arm callingfile.o
0x0000fab8 0x00000020 Data RO 1397 .constdata file1.o
0x0000fad8 0x0000000e Data RO 3725 .constdata file2.o
0x0000fae6 0x00000002 PAD
0x0000fae8 0x00000009 Data RO 4526 .constdata file3.o
0x0000faf1 0x00000003 PAD
0x0000faf4 0x0000000e Data RO 5398 .constdata file4.o
调用驻留在a.c.中的函数。 CallingFile(SRAM) - >在a.c(DRAM)中调用函数test() - > test()
0x0000faa8 0x00000008 Code RO 5150 i.time__delay_ticks rtos.o
0x0000fac8 0x00000008 Code RO 5203 sram_code_arm callingfile.o
0x0000fad0 0x00038758 Data RO 996 .constdata a.o
0x00048228 0x00000020 Data RO 1397 .constdata file1.o
0x00048248 0x0000000e Data RO 3725 .constdata file2.o
0x00048256 0x00000002 PAD
0x00048258 0x00000009 Data RO 4526 .constdata file3.o
0x00048261 0x00000003 PAD
为什么在调用函数调用函数时会看到额外的字节0x00038758(a.o)?