2348835_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2348835_zh-CN

2348835_zh-CN

S32K1 弱定义不能被强定义覆盖。

你好,恩智浦

我们遇到过这样一个问题,即一个弱定义的中断处理函数无法被库中的强定义所替代。当我们将 SDK 编译成静态库并将其添加到 APP 时,发现 CAN0 中断处理函数无法进行强定义。
我使用的 IDE 是 S32DS ARM 2.2,SDK 版本是 3.0.0,编译器版本为 gcc 6.3。
以下是我的 Demo 测试情况:
如果在启动时保留弱定义的中断处理函数,中断向量表的内容将是弱定义的函数。
image.png
② 如果我注释掉启动时定义较弱的中断处理函数,就可以正确定义 CAN 中断处理函数。
image.png
造成这种现象的原因是什么?测试 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 的源文件和编译静态库后的文件附后。
 
 
 
 
 
 
 
 
 
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎04-11-2026 02:40 AM
更新者: