将旧标准中的申述导入新标准
注意
此工作流仅适用于 Polyspace® Bug Finder™。
当您从旧标准迁移到新版本标准时,Polyspace 会自动导入旧标准中的审查信息。以下标准支持将旧标准中的申述导入新标准:
从 MISRA C™:2004 导入注释和注解到 MISRA C:2012。
从 MISRA C:2004 和 MISRA C:2012 导入注释和注解到 MISRA C:2023。
从 MISRA™ C++:2008 和 AUTOSAR C++14 导入注释和注解到 MISRA C++:2023。Polyspace 会自动将 MISRA C++2008 规则和 AUTOAR C++14 规则中的注解导入到相应的 MISRA C++:2023 规则中。
Polyspace 会自动从旧标准中导入这些审查信息:
通过用户界面添加的状态、严重性和注释值。
使用代码注解添加的申述。
有关导入注释的一般规则,请参阅 Import Review Information from Previous Polyspace Analysis。
假设您的工程有以下源代码,您运行了 MISRA C:2012 分析。
#include <stdint.h> #include <complex.h> void foo() { uint16_t u16x = 0, u16y = 0; uint32_t u32x = 0, u32y = 0; u32x * (u16x + u16y); u32x = (u16x + u16y) + u32x; u32x += (u32y + u16y); } void bar() { _Complex float cx; _Complex double dx; float f; double d; cx + f; cx + d; }
如果您将同一工程迁移到检查 MISRA C:2023 编码规则违规,Polyspace 会自动导入您为 MISRA C:2012 结果提供的申述。
Polyspace 在从旧的 MISRA C 标准迁移到新的 MISRA C 标准时,会导入申述和注解。如果当前分析同时检查了旧版和新版 MISRA C 标准的违规情况,则申述和注解导入到旧的 MISRA C 违规中。
将多个 MISRA C:2004 注解映射到同一个新版 MISRA C 结果
当您使用代码模块语法或多行注解语法来申述对 MISRA C:2004 规则和指令的违规时,如果多个违规映射到同一个 MISRA C:2012 或 MISRA C:2023 规则,Polyspace 不会导入每个申述。相反,Polyspace 只导入一组状态、严重性和注释值,并将这些值应用于该特定 MISRA C:2012 或 MISRA C:2023 规则违规的所有实例。
例如,假设您分析代码时发现违反了 MISRA C:2004 Rule 16.3 和 Rule 16.5。您可以使用注解语法来申述这些结果,为每条规则输入不同的状态和解释性注释。
//polyspace-begin misra2004:16.3 [Status 1] "Explanatory comment 1" //polyspace-begin misra2004:16.5 [Status 2] "Explanatory comment 2" /*code block start;*/ /* This block of code contains violations of MISRA C:2004 rules 16.3 and 16.5 */ /*code block end;*/ //polyspace-end misra2004:16.3 //polyspace-end misra2004:16.5
这些违规行为对应于 MISRA C:2012 规则 8.2。当您根据 MISRA C:2012 标准检查注解代码时,Polyspace 只会导入第一行注解(针对 MISRA C:2004 Rule 16.3),并将其应用于所有 MISRA C:2012 Rule 8.2 的结果。第二行注解(针对 MISRA C:2004 Rule 16.5)会被忽略。在结果列表窗格中,所有违反 MISRA C:2012 Rule 8.2 的规则,其状态列都设置为 Status 1
,而注释列都设置为 "Explanatory comment 1"
。
注意
对于每一条导入的注解与原始注解存在冲突的结果,输出摘要窗格都会显示一条警告消息。导入 MISRA C:2004 注解后,请检查您打算继续调查或修复的结果,确保它们没有被分配“已申述”状态。
另请参阅
检查 MISRA C:2012 (-misra3)
| 检查 MISRA C:2023 (-misra-c-2023)