我有一个不会改变的库堆栈,以及一个仅使用此堆栈的固件。固件将在此过程中发生很大变化。由于有限的内存和资源问题,我不希望每次都释放整个映像(包括库堆栈)(这是一个嵌入式应用程序而不是桌面或服务器)。 我只想发布应用程序映像,并自动能够使用库映像。我不知道该怎么做。我知道在Windows中,例如这是由dll处理的。但这是一个嵌入式应用程序,没有操作系统。二进制图像加载到内存,处理器将执行它。 有经验/建议吗?
工具链:IAR 8051
答案 0 :(得分:4)
这在很大程度上取决于您的工具链。这是一种可能的高视角方法。
将库编译为可执行映像,将链接器设置为使用闪存空间的特定部分。您可能需要假/存根条目函数才能让链接器满意。
完成后,找到库使用的符号的所有地址,并在构建正常程序时指示链接器指示这些符号位置,并且在链接时不指示链接进程使用中间库对象。还指示链接器将代码放入可更新的闪存部分。
您将拥有的是图像库的图像,以及使用库在库中构建新版主程序图像的能力。
如果您的链接器输出格式是未经剥离的elf(在转换为二进制文件以便在闪存上刻录之前),并且您的链接器可以接受纯文本文件以获取指令(如果您是使用gnu工具链)。我建议为你的理智编写脚本,除非该库中只有很少的外部可见功能和变量。
我必须同意一些评论员;除非转移库非常困难,否则你应该只构建一个包含库的简单图像并推送整个库。您可能会说库现在永远不会改变,但不可避免地会出现需要更改库代码的内容,如果更改库并且无法将符号保持在完全相同的位置,则所有应用程序映像都不会能够使用新库。在处理兼容软件(固件)更新时,这是一个噩梦的秘诀。