繁体   English   中英

GCC-ARM:在 C 中跳转到 linker 部分而不是绝对地址

[英]GCC-ARM: Make a jump in C to a linker section instead to a absolute address

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

因此我有两个 linker 文件。

一个二进制文件运行并在另一个 memory 中加载第二个二进制文件,第二个运行。

有一个 function 两个代码都使用,它由第一个代码加载到 RAM 中,所以在第二个代码中我调用这个 function 实际上是跳转到它在 RAM 中加载的地址(在 Z3175B42736043407 的 Z3175B423736043407 文件中第一个 SW 我已经定义了一个特定的部分,我强制加载这个 function)。

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

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

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

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

因此,如果我更改 linker 中的地址,我也不必更改 JUMP 指令。

非常感谢

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

直接从 C 代码访问 Linker 部分

NOLOAD 指令

将 linker 文件一分为二并使用两者进行链接(问题的答案有一个例子)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM