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.

[参考译文] TMS320F2800157:内联函数编译

Guru**** 2540460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1312913/tms320f2800157-compilation-of-inline-functions

器件型号:TMS320F2800157

大家好、

GetBoardWorkingFlag()函数定义如下,这是一种内联类型。

然后在某个位置调用该函数。

由于这是一个内联函数、因此该函数在编译后不应存在、并会在调用该函数的位置进行扩展(与宏定义的效果类似)。

映射文件中确实没有这样的函数。

但在调用该函数的地方、汇编指令是 LCR (函数跳转指令)。

static inline bool GetBoardWorkingFlag()
{
    return (boardStatus_WorkingNormal == boardStatus);
}

bool boardWorkingFlag = GetBoardWorkingFlag();

0094b3: 7640919E LCR GetBoardWorkingFlag   --- GetBoardWorkingFlag()是内联类型,应在调用它的地方展开而不调用。 为什么这里仍有一条函数跳转指令?

0094b5:9645 MOV *-SP[5]、AL

--

谢谢、此致

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

    你好,耶鲁,

    我能够在我身边复制这一点、我的理解与您的理解相同、我认为使用静态内联函数不应创建单独的函数调用。  我不知道这背后的确切原因、但对于您想要实现的目标、使用如下所示的宏函数可能会更好:

    #define GetBoardWorkingFlag(a, b)   (a == b)
    
    void main(void)
    {
        <other code here>
        
        boardWorkingFlag = GetBoardWorkingFlag(boardStatus_WorkingNormal, boardStatus);
        
        <other code here>
    }

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

    您好、Omer:

    感谢您的答复。

    此问题已通过选择此选项解决:

    --

    谢谢、此致