This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] F29H850TU:如果静态函数由内联汇编函数调用、则不会对其进行编译/链接

Guru**** 2695575 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1594299/f29h850tu-the-static-function-is-not-compiled-linked-if-it-is-called-by-an-inline-assembly-function

器件型号: F29H850TU

器件:F29H850

CCS:20.3.

编译器:TI C29 Clang 编译器 2.0.0

我在 main.c(附后)中定义了三个函数。 两个是公共函数 (main() 和 pub_func())、一个是静态函数 (static_func())。 PUB_FUNC() 和 STATIC_FUNC() 都在 main() 中调用、带有内联汇编代码(行#26 和行#29)。  

编译和链接工程时、我收到错误“undefined symbol“:static_func(静态函数)。 使用内联汇编调用公共函数(第 29 行)可以正常工作。

添加 c 函数调用(第 27 行)将解决该问题。 我想知道为什么在内联汇编代码中调用静态函数会生成错误。 我是否错过了编译/链接选项中的某些内容?

 

main.c 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我已将此主题提请编译器专家注意、因为他们将能够提供最佳帮助。

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、由于`static_func`函数被声明为静态、因此编译器在编译该文件时将看不到内联汇编中的引用、并最终在链接时之前删除该函数、因此出现了错误。  `PUB_FUNCTION`不会被删除(非静态)、并会一直持续到链接时。  但我强烈建议不要从内联汇编代码调用函数、因为它不会遵守编译器实现的严格 C29 调用约定要求。

    -Alan