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.

[参考译文] 编译器/TM4C123GH6PM:驱动程序库的Misra问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/625975/compiler-tm4c123gh6pm-misra-problem-with-driver-library

部件号:TM4C123GH6PM

工具/软件:TI C/C++编译器

大家好,

我最近尝试熟悉MISRA规则,  

我使用了以下功能:  

SysctlClockSet(sysctl_SYSDIV_2_5|sysctl_use_pll|sysctl_OSC主|sysctl_XTAL_16MHz);

并具有以下内容:

#1393-D (MISRA-C:2004 Signe/R)如果整数类型的表达式不是转换为相同10.1 的更宽整数类型,则不应将其隐式转换为不同的基础类型  

#1406-D (MISRA-C:2004 12.7 /R)按位运算符不应用于其基础类型为signed的操作数

当我尝试启用任何外设时:

SysctlPeripheralEnable(sysctl_Periph_CAN0);
while (!SysCtlPeripheralReady (sysctl_Periph_CAN0)){} 

我有以下警告:  

#1464-D (MISRA-C:2004 10.6 Unsigned类型的所有常量都应应用"U"后缀

任何人都能提供帮助?

谢谢  

面积

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

    我可以解释一些事情。  我不能告诉你最好的解决办法。

    此编译器组不提供任何驱动程序库。  因此,我不能肯定地告诉你问题的原因。  但我可以使用此源代码重现相同的诊断程序...

    /* file.c */
    
    typedef unsigned int UINT32_t;
    
    void call(UINT32_t arg);
    void fxn (void);
    
    void fxn (void)
    {
    call(10|20);/*两个MISRA诊断*/
    call(10U | 20U);/*无诊断 */
    } 

    下面是一个简单的编译命令和生成的诊断...

    C:\path\to\dir>armcl -ps --check_Misra --verbose_diagnostics file.c
    "file.c",第10行:警告:(Misra-C:2004 12.7 /R)按位操作符不能
    应用于其底层类型为signed的操作数
    呼叫(10|20);/*两个MISRA诊断*/
    ^
    
    "file.c",第10行:警告:(Misra-C:2004 10.1 /R)表达式的值
    的整数类型不应隐式转换为不同类型
    基础类型(如果表达式不是常量且是函数)
    参数
    呼叫(10|20);/*两个MISRA诊断*/ 

    注意:使用"u"常量后缀时,没有诊断程序。  后缀表示常量的类型是无符号int。   

    此驱动程序库可能未被记录或测试为与MISRA兼容。

    谢谢,此致,

    -George