我想知道在使用嵌入式代码从 Simulink 模型生成代码后是否可以避免 MISRA 警告 10.1、13.2 和 12.6(或者是否可以通过其他方式生成代码?)。
例如(生成的代码)
if (A)
{;}
在 if(A) 语句中存在 MISRA 违规。
是否可以使用嵌入式编码器生成代码,例如
if (A !=0)
{;}
如果 (A) 不使用布尔类型,我很难生成这种类型的构造,在这种情况下不违反规则 13.2。
如果没有布尔类型,我会得到以下信息:
如果 (A > 1) { ...}
我使用的是 R2015b 版本。如果您可以共享一个生成此类代码的示例模型,那就太好了。
此外,根据 MISRA AC AGC 标准(MISRA-C 应用指南:2004 在自动代码生成的上下文中),所有列出的规则(10.1、12.6、13.2)都是推荐的,而不是强制性的。
因此,遵守这些规则取决于您的应用程序的重要性。
即使在这些规则已被重新分类的最新 MISRA 2012 标准中,它们在生成代码的上下文中仍被归类为建议。
有关生成代码的 MISRA 合规性的一般信息,这是一个很好的参考:
http://www.mathworks.com/solutions/automotive/standards/misra-c.html
或者
http://www.mathworks.com/solutions/aerospace-defense/standards/misra-c.html