用于链接在不同代码空间但相同 Flash 中找到的函数的链接器

发布于 2024-10-09 07:40:40 字数 203 浏览 2 评论 0原文

我使用HCS08微控制器和Code Warrior作为开发环境。 我的 ROM 上有 2 个独立的程序(引导加载程序和应用程序代码)。 我的 Bootlaoder 代码中存在一些文件/函数,并且我的应用程序代码也需要这些文件/函数,但我不想重复这些函数(3-4k 字节)。 那么,有没有什么方法可以使用不属于应用程序代码但存在于 ROM 中的函数。这个想法可能吗?可以告诉链接器一些东西吗?

I am using HCS08 micro-controller and Code Warrior as Development Environment.
I have 2 separate programs residing on the ROM (Bootloader and Application code).
I have some files/functions present in Bootlaoder Code and also required for my Application code but I do not want to duplicate these functions(are 3-4k bytes).
So, is there any way possible to use functions which are not part of Application code but are present in ROM. Is this think possible? Can linker be told something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜尕妞 2024-10-16 07:40:40

一般来说,是的,但是通过链接器执行此操作的方式可能是特定于工具集的。我从未使用 CodeWarrior 进行嵌入式开发,但作为使用 ARM RVCT 工具集的示例,您可以在链接引导加载程序时创建一个“symdefs”文件,并将应用程序代码链接到该文件。

如果您不想担心工具集锁定,那么可以选择使用 GNU 的 binutils 从引导加载程序的可执行文件中导出符号表(例如 nm foo.exe > symtab.txt ),在符号表上运行一个脚本,将其转换为以下形式的 .h 文件:

#define symbol_name_ADDR 0x00001efc

并通过如下机制调用外部定义的函数:

((void (*)(int arg)) symbol_name_ADDR)(12);

这非常难看,但应该可以完成工作。

In general, yes, but the way you'd do this through the linker is likely to be toolset specific. I've never used CodeWarrior for embedded development, but as an example using ARM's RVCT toolset, you could create a 'symdefs' file when you link the bootloader, and have the application code link against that file.

If you don't want to worry about toolset lock-in, then an option would be to use GNU's binutils to export a symbol table from your bootloader's executable (e.g. nm foo.exe > symtab.txt), run a script over the symbol table to convert it into a .h file of the form:

#define symbol_name_ADDR 0x00001efc

and call externally-defined functions through a mechanism like:

((void (*)(int arg)) symbol_name_ADDR)(12);

which is pretty ugly, but should get the job done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文