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.

[参考译文] 编译器警告在 ISR 内使用函数、即使该函数是内联函数也是如此。

Guru**** 2563960 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1211260/compiler-warns-about-using-a-function-inside-an-isr-even-though-the-function-is-inline

此代码--

/**
*计时器 A0中断服务例程
*/
#pragma vector=TIMERA0_vector
__interrupt void ta0_ISR (void)                        //计时器达到 TACCR0后进行中断

LED_Control (0);
_BIC_SR_IRQ (LPM3_BITS);
}

产生该警告--

"../main.c"、第235行:备注#1538-D:(ULP 10.1) ISR ta0_ISR 调用函数 LED_Control。 建议将函数调用远离 ISR、或内联函数或使用 pragma

但相关函数被声明并定义为内联函数-

*/李国华女士(香港 /
/*局部函数原型("static")*/
*/李国华女士(香港 /
静态内联 void LED_Control (int 灯);
*/李国华女士(香港 /
/*函数实现-全局('extern')和局部('static')*/
*/李国华女士(香港 /
/**
* LED_Control
* param:Int light - 0 off、1 on
*/
静态内联 void LED_Control (int 灯)

      如果(轻){
        P1OUT |= LED;
      }其他{
        P1OUT &=μ~LED;
     }
}

不应该在这里使用内联函数来消除警告?

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

    我建议阅读编译器用户指南(SLAU132Y)、特别是第2.11节"使用内联函数扩展"。  它告诉您编译器实际内联函数必须满足哪些条件;使用"inline"关键字只是对编译器的建议。

    另外需要注意的是、ULP 消息并不是真正的警告、而是信息指南。 如果该函数因为满足 SLAU123Y 第2.11节中的条件而实际内联到了固件中、则该消息仍将显示、因为您是在调用函数。 根据我的经验、ULP Advisor 只需查找 源代码、它不知道编译器和链接器实际上做了什么来进行优化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    不应该在这里使用内联函数来消除警告吗?

    感谢您提出合理的问题。  我提交了 EXT_EP-11101 来对此进行调查。  我们欢迎您通过这个链接来了解这一点。

    谢谢。此致、

    -George.