如何使用IAR链接器生成没有main函数的十六进制 - xlink?

时间:2016-08-18 08:00:05

标签: linker embedded workbench iar xlink

重点是使用IAR链接器生成一个没有main函数的十六进制 - xlink? 该代码应加载到RL78 MCU的RAM中。

1 个答案:

答案 0 :(得分:1)

作为第一个结果,Google iar generate hex from library的快速搜索将我带到了this document, "Creating an Absolutely Placed Library"。它包含您需要的所有信息,以及有关使用CRC进行一致性检查的一些信息。该文档适用于IAR EWRX变体,但概念应该都是相同的。

基本过程是将您的库编译为可执行文件,但其中没有main()函数。您需要在General - >下设置库配置。 None的图书馆选项。您也可以在此时设置文件转换设置。

由于您没有程序入口点的main()函数,因此您需要创建一个入口函数来调用IAR C运行时初始化函数__iar_data_init2(),然后设置链接器使用此函数作为入口点(可以在链接器选项 - >库选项下找到)。

构建库时,所有符号都将保留到使用它的应用程序的最后一个链接步骤,但由于您要将其构建为可执行文件,因此要保留的符号必须具有{{1 }}关键字,或在链接器下 - >您可以指定__root以保留所有符号的额外选项。

在下一步中,您需要使用--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的输出添加为链接器下的库 - &gt;库,在您的应用程序中,在尝试使用任何库的符号之前,您需要在库中调用您的输入函数。

这应该是生成一个存在于hex文件中的库所需的信息,可以单独加载,以及如何使用该库。引用的文档有更多的细节,所以如果它在该链接上可用(或者可以通过标题在其他地方找到),那么它将是比我的摘要更好的参考。