MISRA および AUTOSAR への準拠性を高めた C/C++ コードの生成
MISRA™ (Motor Industry Software Reliability Association)1 で『Guidelines for the Use of the C Language in Critical Systems』(MISRA C™) および『Guidelines for the Use of the C++ Language in Critical Systems』が策定されています。また、『Guidelines for the Use of the C++14 Language in Critical and Safety-Related Systems』が AUTOSAR (AUTomotive Open System ARchitecture) 開発パートナーシップによって策定されています。MATLAB® コード ベース用に C または C++ コードを生成するときに、これらのコーディング ルールの大部分に準拠したコードを生成するようにコード ジェネレーターを構成できます。
コード生成のサポートの範囲
MATLAB コードから C または C++ コードを生成する際に、生成されたコードが MISRA C:2012、MISRA C:2023、MISRA C++:2008、および AUTOSAR C++14 の各ガイドラインに最大限準拠するようにコード ジェネレーターを構成できます。
生成されたコードが最大限に準拠するようにするには、以下のようにします。
コード生成構成プロパティを推奨値に設定する。これは、コマンド ラインまたは MATLAB Coder™ アプリのいずれかで実行できます。コマンド ラインでのコード生成構成オブジェクトのプロパティの構成およびMATLAB Coder アプリ設定の構成を参照してください。
coder.cevalを使用して生成コードと統合するユーザー記述の C/C++ ファイルまたはサードパーティの C/C++ ファイルが MISRA および AUTOSAR のガイドラインに準拠していることを確認する。
生成コードに、MISRA および AUTOSAR のガイドラインに準拠しない以下のファイルが 1 つ以上含まれることがあります。
coder_posix_time.hcoder_posix_time.crt_defines.hrt_nonfinite.hrtGetInf.hrtGetNaN.hrtwhalf.hrtwhalf.crtwhalf.cpprtwtypes.h
特定の状況では、rtwtypes.h ファイルに含まれるカスタム型定義を生成コードで使用しないようにコード ジェネレーターを構成できる場合があります。例については、MISRA C++ 準拠の追加設定を参照してください。
コード ジェネレーターでは、MISRA ガイドラインおよび AUTOSAR ガイドラインにおいて必要なコーディング ルールおよび必須のコーディング ルールの大部分がサポートされています。完全な一覧については、次のトピックを参照してください。
コード生成では、これらのルールを Polyspace® Bug Finder™ 製品と同じ方法で解釈します。特定のコーディング ルールがコード ジェネレーターでどのように解釈されるかについては、Polyspace Bug Finder ドキュメンテーションの対応するリファレンス ページで "Polyspace 実装" のセクションを参照してください。
MISRA C:2012 命令およびルール (Polyspace Bug Finder)
MISRA C:2023 命令およびルール (Polyspace Bug Finder)
MISRA C++:2008 ルール (Polyspace Bug Finder)
AUTOSAR C++14 ルール (Polyspace Bug Finder)
コマンド ラインでのコード生成構成オブジェクトのプロパティの構成
Embedded Coder® コード生成構成オブジェクトを作成します。
cfg = coder.config('lib','ecoder',true);
coder.setupMISRAConfig関数を使用して、次の表のプロパティを、MISRA への準拠性を高める値に設定します。coder.setupMISRAConfig(cfg);
プロパティ MISRA への準拠性を高める値 CastingMode'Standards'CppGenerateEnumClass(ターゲット言語が C++ の場合)trueCppInterfaceClassName(ターゲット言語が C++ の場合)''CppInterfaceStyle(ターゲット言語が C++ の場合)'Functions'CppNamespace(ターゲット言語が C++ の場合)C++ の有効な名前空間名
DataTypeReplacement'CoderTypedefs'EnableDynamicMemoryAllocationfalseEnableOpenMPfalseEnableRuntimeRecursionfalseEnableSignedLeftShiftsfalseEnableSignedRightShiftsfalseGenerateDefaultInSwitchtrueHeaderGuardStyle'UseIncludeGuard'JustifyMISRAViolationstrueMaxIdLength(ターゲット言語が C の場合)31ParenthesesLevel'Maximum'RuntimeChecksfalseTargetLangStandardC の場合は 'C99 (ISO)'、C++ の場合は'C++11 (ISO)'メモ
JustifyMISRAViolationsを使用して MISRA および AUTOSAR の注釈を追加するために、GenerateCommentsをtrueに設定しなければなりません。coder.setupMISRAConfigは、MISRA への準拠性を高めるために、この表のパラメーターを推奨値に設定します。この時点で、これらの設定のいずれかをオーバーライドする場合は、そのプロパティ値を手動で変更できます。CppNamespaceプロパティが設定されておらず、TargetLangプロパティが'C++'である場合、coder.setupMISRAConfigはCppNamespaceプロパティを既定の文字ベクトル'Codegen'に設定します。この値をプロジェクトに固有の名前空間名に変更します。-configオプションを使用して、構成オブジェクトをcodegenに渡します。codegen myFunction -config cfg ...
MATLAB Coder アプリ設定の構成
[ビルド タイプ] を
[スタティック ライブラリ]、[ダイナミック ライブラリ]、または[実行可能ファイル]に設定します。[設定] をクリックします。
[MISRA 準拠] をクリックします。
アプリで、MISRA 準拠に影響を与える可能性のある設定が表示されます。

これらすべての設定を推奨値に設定するには、[推奨値に設定する] をクリックします。
個々の設定を変更するには、構成パラメーター ダイアログ ボックスで設定を検索します。
MISRA C++ 準拠の追加設定
既定では、生成する C++ コードは、特定のプリコンパイル済みライブラリとの互換性を最大限に高めるために、bool のカスタム型定義を使用します。このカスタム型定義は、MISRA C++:2008 Rule 5-0-13 および Rule 5-3-1 に違反する可能性があります。
生成された C++ コードで組み込みの bool 型を使用し、これらの違反を回避するには、構成オブジェクトの [ハードウェア ボード] 設定を MATLAB Host Computer から変更します。アプリでこの設定を変更する方法については、ダイアログ ボックスによるハードウェア実行プロパティへのアクセスを参照してください。たとえば、64 ビットの Windows® プラットフォームでコード生成とビルドを行う場合は、[ハードウェア ボード] を [なし - 以下のデバイスを選択] に変更し、[デバイス ベンダー] を [Intel]、[デバイス タイプ] を [x86-64 (Windows64)] に設定します。
静的解析ツールを使用した生成コードの準拠性チェック
ベスト プラクティスとして、コード ジェネレーターとは独立して、生成されたコードの準拠性を検証することをお勧めします。コードを生成した後、静的解析ツール (Polyspace Bug Finder など) を使用して、MISRA および AUTOSAR コーディング標準への準拠の程度をチェックします。
Polyspace Bug Finder を使用して C/C++ コードのコーディング ルール違反をチェックする方法については、以下を参照してください。
デスクトップでの PolyspaceBug Finder の実行 (Polyspace Bug Finder)
参考
coder.EmbeddedCodeConfig | coder.setupMISRAConfig
トピック
- コード生成向けにサポートされている MISRA C:2012 コーディング命令およびルール
- コード生成向けにサポートされている MISRA C:2023 コーディング命令およびルール
- MISRA C++:2008 and AUTOSAR C++14 Coding Rules Supported for Code Generation
- MATLAB Coder によって生成された C/C++ コードの Polyspace 検証
- デスクトップでの PolyspaceBug Finder の実行 (Polyspace Bug Finder)
- Generate MISRA C:2012 Compliant Code and Verify with Polyspace (Polyspace Bug Finder)
外部の Web サイト
1 MISRA and MISRA C are registered trademarks of HORIBA MIRA Ltd., held on behalf of the MISRA Consortium.