S32K1 弱定义不能被强定义覆盖。你好,恩智浦
我们遇到过这样一个问题,即一个弱定义的中断处理函数无法被库中的强定义所替代。当我们将 SDK 编译成静态库并将其添加到 APP 时,发现 CAN0 中断处理函数无法进行强定义。
我使用的 IDE 是 S32DS ARM 2.2,SDK 版本是 3.0.0,编译器版本为 gcc 6.3。
以下是我的 Demo 测试情况:
如果在启动时保留弱定义的中断处理函数,中断向量表的内容将是弱定义的函数。
② 如果我注释掉启动时定义较弱的中断处理函数,就可以正确定义 CAN 中断处理函数。

造成这种现象的原因是什么?测试 Demo 的源文件和编译静态库后的文件附后。
Re: S32K1 weak cannot be overridden by strong definitions.你好@武仙龙
这可能与编译器的某些设置有关。我有时间就会处理你的问题,这不是一个紧急问题。
Re: S32K1 weak cannot be overridden by strong definitions.你好,@Senlent
感谢您的支持。只有在使用静态库文件 .a 时,才会出现弱定义不能被强定义替换的问题。并在静态库中使用强定义。
基于 S32K146_UJA1169_SDK300,我将 SDK 编译成静态库(.a 文件)并加载到应用程序中,例如我的 S32K146_UJA1169_Lib_SDK300。这样我就能重现问题了。除非我注释掉弱定义,否则 CAN0_ORed_0_15_MB_IRQHandler 不会被加载到中断向量表中。
敬上,
xianlong
Re: S32K1 weak cannot be overridden by strong definitions.你好@武仙龙
我没有完全理解你的问题。
我测试了您提供的项目"S32K146_UJA1169_SDK300.zip," 并按照您的方法禁用"def_irq_handler CAN0_ORed_0_15_MB_IRQHandler。"
两者的编译结果完全相同,没有任何差别。
Re: S32K1 weak cannot be overridden by strong definitions.造成这种现象的原因是什么?测试 Demo 的源文件和编译静态库后的文件附后。