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.
工具/软件: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