调用驻留在不同内存中的函数时出现ARM链接错误

时间:2015-04-14 17:02:14

标签: c arm

我想清理一些代码,其中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)?

0 个答案:

没有答案