gpt4 book ai didi

c - GCC-ARM : Make a jump in C to a linker section instead to a absolute address

转载 作者:行者123 更新时间:2023-11-30 16:13:18 24 4
gpt4 key购买 nike

我有一个软件,它分为两个二进制文件(加载在不同的内存中)。

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

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

两个代码都使用一个函数,并且它由第一个代码加载到 RAM 中,因此在第二个代码中,我对该函数的调用实际上是跳转到它加载到 RAM 中的地址(在链接器中)我在第一个软件的文件中定义了一个特定部分,在其中强制加载此函数)。

目前,这个机制对我来说是正确的。

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

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

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

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

非常感谢

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

最佳答案

Accessing Linker Sections directly from C code

NOLOAD directive

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

您可以在 App2 中使用 NOLOAD(在 App1 中正常加载它)来了解该函数,但不加载它,然后按照第一个链接中所述访问它。

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

关于c - GCC-ARM : Make a jump in C to a linker section instead to a absolute address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58079394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com