如果向 Rational® Rhapsody® 模型添加了 MISRA C++ 设置和 MISRA C++ 类型,那么可以生成符合 MISRA C++ 标准的代码。
关于此任务
注: 对于高度符合 MISRA/C++ 标准的框架,建议您使用简化 C++ 执行框架 (SXF)。
过程
- 要向模型添加 MISRA C++ 设置和 MISRA C++ 类型,请在 Rational Rhapsody for C++ 中打开该模型。
- 选择,转到 <product installation path>\Share\Settings\MISRA,选择 MISRAC++.sbs 文件,然后单击确定。这些设置向您的模型添加了许多属性,它们使 Rational Rhapsody 代码生成器符合 MISRA C++ 标准。
- 要对模型添加 MISRA_Cpp_Types 程序包,请选择,转到 <product installation path>\Share\LangCpp\oxf\model\oxf_rpy,选择 MISRA_Cpp_Types.sbs 文件,然后单击确定。此程序包包含 MISRA C++ 类型。
- 使用 MISRA C++ 类型代替 C++ 基本类型(例如 int 和 char)。
下一步做什么
Rational Rhapsody 支持以下 MISRA C++ 规则:
- 7-1-1:必须使用 constant 来限定未修改的变量
- 0-1-7:如果函数具有非 void 返回类型并且不是重载的运算符,那么它的返回值必须始终被使用
- 5-14-1:逻辑 && 或 || 运算符的右侧操作数不得包含副作用
- 6-4-2:所有 if...else 都必须以 else 子句终止
- 5-0-2:必须对表达式中的 C++ 运算符优先级规则实施受限依赖关系
注: - 为避免 MISRA C++ 规则 5-2-4、7-1-2 和 18-4-1 的违例,请勿使用端口。
- 根据 MISRA C++ 规则 18-4-1,不能进行动态堆内存分配。通过以静态方式创建事件并使用 send(&theEvent) 来发送这些事件,可以避免进行动态内存分配。
下列属性具有列示的值:
- CPP_CG::Argument::IsConst = True
- CPP_CG::Attribute::GenMutatorConstantArgument= True
- CG::Attribute/ Relation ::IsConst = SignatureAndReturnValue
您需要注意:
- 要在端口中使用 new 或 delete,为端口生成的所有属性都通过值生成,因此不生成 new 或 delete。
- 框架更改:
OMEvent::isTypeOf 已由
bool OMEvent::isTypeOf(IOxfEvent::ID eventId) const 更改为
bool OMEvent::isTypeOf(const IOxfEvent::ID eventId) const
由于框架的基类是在用户继承之前定义的,因此它们的初始化也是如此。例如,AcmeJet::AcmeJet(void)
: OMThread(), Jet() {。对于常规模型,基类初始化在缺省情况下处于关闭状态。
- 在 Misra C++ 中,关系的缺省可视性是私有。
- 在不具有继承的状态图 中,属性现在是私有属性并定义为枚举。
- 在具有继承的状态图中,属性受保护并定义为整数,这不符合 MISRA 标准。在这种情况下,将发出 CG 警告并在代码中添加 LDRA 警告。
- 对于 MISRA C++ 模型事件自变量:
- 添加了新的 Boolean 属性 CPP_CG:Event:GenerateArgumentsAsPrivate,如果此属性设置为 Checked,那么自变量的可视性值为 private。
- 对于所有模型,事件的自变量的注释现在是 //## auto_generated。