gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:02:58 25 4
gpt4 key购买 nike

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

最佳答案

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

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

#define symbol_name_ADDR 0x00001efc

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

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

这很丑陋,但应该可以完成工作。

关于c - 用于链接在不同代码空间但相同 Flash 中找到的函数的链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4556801/

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