GCC-ARM:在C中跳转到链接器部分,而不是绝对地址

时间:2019-09-24 11:34:46

标签: c linker

我有一个SW,该SW被分为两个二进制文件(加载到不同的存储器中)。

因此,我有两个链接器文件。

二进制文件运行并将第二个二进制文件加载到另一个内存中,第二个二进制文件运行。

这两个代码都有一个函数,第一个函数将其加载到RAM中,因此在第二个函数中,我对该函数的调用实际上是一个JUMP,指向该函数在RAM中加载的地址(在链接器中)我已定义了第一个SW的文件中的特定部分,我在其中强制加载此功能。

当前,这种机制对我来说是正确的。

我的问题是,可以跳到标签或符号而不是特定地址吗?

理想情况下,在链接器文件中,我将使用标签定义地址,而在代码中,我将引用该标签。

也就是说,编译器和链接器都将理解该标记并将其转换为地址。

因此,如果我更改链接器中的地址,则不必在JUMP指令中也进行更改。

非常感谢

注意:gcc-arm-none-eabi-4_9-2015q3

1 个答案:

答案 0 :(得分:0)

Accessing Linker Sections directly from C code

NOLOAD directive

Splitting linker files in two and using both for linking(问题的答案有一个例子)

您可以在App2中使用NOLOAD(通常在App1中将其加载)来了解该功能,但不加载该功能,然后如第一个链接中所述访问它。

如果您想使用预处理器宏和编译/链接选项,则可以在两个应用程序之间共享一个附加的链接器文件,但有条件地根据开关加载部分。这将帮助您避免在两个链接器文件中重复地址(例如,使用 ld1 + ldshared 链接App1,使用 ld1 + ld与其他开关共享)。