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.

[参考译文] TMS320F28069:__tbit MISRA 问题

Guru**** 2540720 points
Other Parts Discussed in Thread: TMS320F28069

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/824487/tms320f28069-__tbit-misra-problems

器件型号:TMS320F28069

你好。

我已经为 TMS320F28069和开发了一个代码

LDRA TBvision 已分析此代码是否符合 MISRA-C:2012/AMD1/TC1标准。

在此代码中、我使用了__tbit 和 LDRA Tell Me

没有预先声明的函数调用。 :__tbit Misra-C:2012/AMD1/TC1 R.A.17.3

是否有方法使用__tbit 来避免此违规?

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

    它实际上不是一个函数-它是一个内在函数。 不过、您可能可以通过为 LDRA 提供外部原型来满足它的要求。

    惠特尼

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

    我会尝试、

    因为   我们在办公室中没有 LDRA 软件的许可证

    我得等...

    当我可以检查此解决方案是否正常工作时、我将单击"此已解决我的问题"

     

    但我认为是正确的

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

    原型是

    bool __tbit (int src、int bit);

    但我相信 MISRA 不接受以_ undescore 开头的函数名称

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

    我的理解是、有关下划线的规则是说它们是保留的、因为它们是供 C 语言实现(如编译器及其库)使用的。 由于__tbit()是编译器定义的内在函数(而不是应用程序代码中的函数),因此它似乎并不是真正违反规则的行为。 不过、LDRA 不知道它是编译器内在函数、因此无论如何都会报告它。

    惠特尼

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

    但是,使用__byte 内在函数是否可以做到这一点?

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

    是的、应该是这样。 您是否因为 C++样式引用的怪异而提出疑问? 我们过去已解决了以下问题:

    #if (defined (__TMS320C28XX__)|| defined (__TMS320C28XX_CLA__)
    #else
    extern Int16_t &__byte (int16_t *数组、uint16_t byte_index);
    #endif 

    if 会将&符号从编译器中隐藏、这样它就不会被混淆、但是只要您将__TMS320C28XX__添加到 LDRA 宏定义中、它仍然可以看到__byte()的原型。

    还是这不是问题?

    惠特尼