2016-08-18 60 views
-2

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

+0

到目前为止,你有什么工作?我假设你有一个库项目生成类似'library.a'? – rjp

+0

看起来像一个XY问题;你究竟在努力实现什么?动态加载/链接也许?完全关联的应用程序必须有一个入口点。 GNU链接器支持一种称为“部分链接”的选项,不确定你的。 – Clifford

回答

1

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

基本的过程就是将你的库编译为一个可执行文件,但不包含main()函数。您需要将常规 - >库选项下的库配置设置为None。您现在也可以设置您的文件转换设置。

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

构建一个库时,所有的符号都将被保留,直到应用程序使用它的最后一个链接步骤,但是由于您将此构建为可执行文件,因此重要的是您要保留的符号具有关键字__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输出和你要找的库文件。对于使用这个库的应用程序,您需要在链接器 - >库下将isymexport的输出添加为库,并且在您的应用程序中,您需要在库中调用入口函数,然后才能尝试使用图书馆的符号。

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

+0

虽然链接到文档是有用的,你也应该实际上*回答SO上的问题,以便它独立(例如,如果链接断开)。在关于如何找到它的过度评论的链接周围,不相关的建议并不能保证它不成为仅链接的答案。 – Clifford

+0

我会为答案添加一个摘要。 – rjp