MISRA C++ に準拠したコードの生成は、MISRA C++ 設定および MISRA C++ 型を Rational® Rhapsody® モデルに追加すれば可能です。
このタスクについて
注: MISRA/C++ に厳格に準拠したフレームワークの場合、単純化 C++ 実行フレームワーク (SXF) を使用するようにお勧めします。
手順
- モデルに MISRA C++ 設定および MISRA C++ 型を追加するには、モデルを Rational Rhapsody for C++ で開きます。
- と選択し、<製品インストール・パス>¥Share¥Settings¥MISRA に移動し、MISRAC++.sbs ファイルを選択して、「OK」をクリックします。これらの設定値によって、
Rational Rhapsody コード生成プログラムを MISRA C++ に準拠させるためのいくつかのプロパティーがモデルに追加されます。
- MISRA_Cpp_Types パッケージをモデルに追加するには、を選択し、<product installation path>¥Share¥LangCpp¥oxf¥model¥oxf_rpy に移動し、MISRA_Cpp_Types.sbs ファイルを選択して「OK」をクリックします。
このパッケージに MISRA C++ 型が含まれています。
- C++ 基本型 (int や char など) の代わりに MISRA C++ 型を使用します。
次のタスク
Rational Rhapsody は、以下の MISRA C++ 規則をサポートしています。
- 7-1-1: 変更されない変数は、修飾済み定数でなければなりません。
- 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 had changed from
bool OMEvent::isTypeOf(IOxfEvent::ID eventId) const
bool OMEvent::isTypeOf(const IOxfEvent::ID eventId) const
フレームワークの基底クラスは、ユーザー継承の前に定義されているので、その初期設定もそうなります。例えば、AcmeJet::AcmeJet(void)
: OMThread(), Jet() {。基底クラス初期設定は、通常モデルに対してはデフォルトでオフになります。
- MisraC++ での関係のデフォルトの可視性はプライベートです。
- 継承のないステートチャートでは、属性は現在プライベートであり、enum として定義されています。
- 継承のあるステートチャートでは、属性は protected であり、整数になります。これは MISRA 準拠ではありません。CG 警告が発行され、LDRA 警告がコードに追加されます。
- MISRA C++ モデルのイベント引数の場合:
- 新規 Boolean プロパティー CPP_CG:Event:GenerateArgumentsAsPrivate を追加すると、チェックされている場合、引数の可視性の値はプライベート になります。
- すべてのモデルで、イベントの引数のアノテーションは現在 //##
auto_generated になっています。