我们在连接强USB_IRQ处理程序时遇到问题。
我们在静态库中存在真正的USB IRQ定义 我们在应用程序启动文件(* .s)中使用处理程序名称填充.vector表,并且我们还有__weak定义,在同一个启动文件中定义。
在链接时,我们看到链接器总是选择启动文件中存在的弱IRQ定义,而不是库中存在的强IRQ定义(* .a)。
如果我们从启动文件中删除弱定义,则会考虑强定义并且它运行良好。
我们看到的问题是,包含强定义的库文件没有以任何方式从我们的应用程序中引用,也就是说,我们没有使用该文件中存在的任何函数或结构。仅使用IRQ处理程序,并且仅在存在硬件事件时才触发。
我们使用ARM GNU工具链,试过多种选择没有任何帮助 我们通过互联网帮助,发现了一些选项,如--no_remove和--keep链接器选项,但是,这些标志似乎不受支持。
如果您在这方面有一些意见,请建议。
答案 0 :(得分:0)
我认为您需要确保从您的程序中引用与强定义相同的源文件中的至少一个符号。否则,链接器将没有理由加载包含IRQ的目标文件。例如,您可以在该源文件中定义一些init函数,并从您的程序中调用它。
确保IRQ函数也以__attribute__((used))
声明。