我有一个SW,该SW被分为两个二进制文件(加载到不同的存储器中)。
因此,我有两个链接器文件。
二进制文件运行并将第二个二进制文件加载到另一个内存中,第二个二进制文件运行。
这两个代码都有一个函数,第一个函数将其加载到RAM中,因此在第二个函数中,我对该函数的调用实际上是一个JUMP,指向该函数在RAM中加载的地址(在链接器中)我已定义了第一个SW的文件中的特定部分,我在其中强制加载此功能。
当前,这种机制对我来说是正确的。
我的问题是,可以跳到标签或符号而不是特定地址吗?
理想情况下,在链接器文件中,我将使用标签定义地址,而在代码中,我将引用该标签。
也就是说,编译器和链接器都将理解该标记并将其转换为地址。
因此,如果我更改链接器中的地址,则不必在JUMP指令中也进行更改。
非常感谢
注意:gcc-arm-none-eabi-4_9-2015q3
答案 0 :(得分:0)
Accessing Linker Sections directly from C code
Splitting linker files in two and using both for linking(问题的答案有一个例子)
您可以在App2中使用NOLOAD(通常在App1中将其加载)来了解该功能,但不加载该功能,然后如第一个链接中所述访问它。
如果您想使用预处理器宏和编译/链接选项,则可以在两个应用程序之间共享一个附加的链接器文件,但有条件地根据开关加载部分。这将帮助您避免在两个链接器文件中重复地址(例如,使用 ld1 + ldshared 链接App1,使用 ld1 + ld与其他开关共享)。