在 Google 上快速搜索 iar generate hex from library 将我带到 this document, "Creating an Absolutely Placed Library",这是第一个结果。它包含您需要的所有信息,以及一些关于使用 CRC 进行一致性检查的信息。该文档适用于 IAR EWRX 变体,但概念应该相同。
基本过程是将您的库编译为可执行文件,但其中没有main() 函数。您需要将 General -> Library Options 下的库配置设置为 None。此时您还可以设置文件转换设置。
由于您没有用于程序入口点的main() 函数,因此您需要创建一个入口函数来调用IAR C 运行时初始化函数__iar_data_init2(),然后设置链接器以使用该函数作为入口点(可以在 Linker Options -> Library Options 下找到)。
在构建库时,所有符号都将保留到使用它的应用程序的最后链接步骤,但由于您将其构建为可执行文件,因此您要保留的符号具有 __root 很重要关键字,或者在 Linker -> Extra Options 下,您可以指定 --no-remove 以保留所有符号。
在下一步中,您需要使用isymexport 导出您想要的符号。您将需要一个文件来指导工具导出的内容。在示例中,他们的文件仅包含以下内容:
show lib_*
show __checksum*
这将指导工具导出所有以lib_ 开头的符号和所有以__checksum 开头的符号。他们指出 __iar_data_init2() 不应该不被导出,因为这会导致与最终将使用此代码的应用程序发生冲突。您可以像这样调用该工具:
isymexport <path to .out file> <path to output from tool> --edit <path to file created above>
现在您应该有来自isymexport 的输出和您正在寻找的库文件。对于使用此库的应用程序,您需要将 isymexport 的输出添加为 Linker -> Library 下的库,并且在您的应用程序中,您需要在尝试使用之前调用库中的入口函数图书馆的任何符号。
这应该是生成库所需的信息,该库位于 hex 文件中并且可以单独加载,以及如何使用该库。引用的文档有更多的细节,所以如果它可以在那个链接上找到(或者可以通过标题在其他地方找到),它将比我在这里的摘要更好的参考。