メインコンテンツ

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 の各ガイドラインに最大限準拠するようにコード ジェネレーターを構成できます。

生成されたコードが最大限に準拠するようにするには、以下のようにします。

生成コードに、MISRA および AUTOSAR のガイドラインに準拠しない以下のファイルが 1 つ以上含まれることがあります。

  • coder_posix_time.h

  • coder_posix_time.c

  • rt_defines.h

  • rt_nonfinite.h

  • rtGetInf.h

  • rtGetNaN.h

  • rtwhalf.h

  • rtwhalf.c

  • rtwhalf.cpp

  • rtwtypes.h

特定の状況では、rtwtypes.h ファイルに含まれるカスタム型定義を生成コードで使用しないようにコード ジェネレーターを構成できる場合があります。例については、MISRA C++ 準拠の追加設定を参照してください。

コード ジェネレーターでは、MISRA ガイドラインおよび AUTOSAR ガイドラインにおいて必要なコーディング ルールおよび必須のコーディング ルールの大部分がサポートされています。完全な一覧については、次のトピックを参照してください。

コード生成では、これらのルールを Polyspace® Bug Finder™ 製品と同じ方法で解釈します。特定のコーディング ルールがコード ジェネレーターでどのように解釈されるかについては、Polyspace Bug Finder ドキュメンテーションの対応するリファレンス ページで "Polyspace 実装" のセクションを参照してください。

コマンド ラインでのコード生成構成オブジェクトのプロパティの構成

  1. Embedded Coder® コード生成構成オブジェクトを作成します。

    cfg = coder.config('lib','ecoder',true);
    

  2. coder.setupMISRAConfig 関数を使用して、次の表のプロパティを、MISRA への準拠性を高める値に設定します。

    coder.setupMISRAConfig(cfg);

    プロパティMISRA への準拠性を高める値
    CastingMode'Standards'
    CppGenerateEnumClass (ターゲット言語が C++ の場合)true
    CppInterfaceClassName (ターゲット言語が C++ の場合)''
    CppInterfaceStyle (ターゲット言語が C++ の場合)'Functions'
    CppNamespace (ターゲット言語が C++ の場合)

    C++ の有効な名前空間名

    DataTypeReplacement'CoderTypedefs'
    EnableDynamicMemoryAllocationfalse
    EnableOpenMPfalse
    EnableRuntimeRecursionfalse
    EnableSignedLeftShiftsfalse
    EnableSignedRightShiftsfalse
    GenerateDefaultInSwitchtrue
    HeaderGuardStyle'UseIncludeGuard'
    JustifyMISRAViolationstrue
    MaxIdLength (ターゲット言語が C の場合)31
    ParenthesesLevel'Maximum'
    RuntimeChecksfalse
    TargetLangStandard C の場合は 'C99 (ISO)'、C++ の場合は 'C++11 (ISO)'

    メモ

    JustifyMISRAViolations を使用して MISRA および AUTOSAR の注釈を追加するために、GenerateCommentstrue に設定しなければなりません。

    coder.setupMISRAConfig は、MISRA への準拠性を高めるために、この表のパラメーターを推奨値に設定します。この時点で、これらの設定のいずれかをオーバーライドする場合は、そのプロパティ値を手動で変更できます。

    CppNamespace プロパティが設定されておらず、TargetLang プロパティが 'C++' である場合、coder.setupMISRAConfigCppNamespace プロパティを既定の文字ベクトル 'Codegen' に設定します。この値をプロジェクトに固有の名前空間名に変更します。

  3. -config オプションを使用して、構成オブジェクトを codegen に渡します。

    codegen myFunction -config cfg ...

MATLAB Coder アプリ設定の構成

  1. [ビルド タイプ][スタティック ライブラリ][ダイナミック ライブラリ]、または [実行可能ファイル] に設定します。

  2. [設定] をクリックします。

  3. [MISRA 準拠] をクリックします。

    アプリで、MISRA 準拠に影響を与える可能性のある設定が表示されます。

    Screenshot of MISRA compliance pane in the MATLAB Coder app.

  4. これらすべての設定を推奨値に設定するには、[推奨値に設定する] をクリックします。

    個々の設定を変更するには、構成パラメーター ダイアログ ボックスで設定を検索します。

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++ コードのコーディング ルール違反をチェックする方法については、以下を参照してください。

参考

|

トピック

外部の Web サイト


1 MISRA and MISRA C are registered trademarks of HORIBA MIRA Ltd., held on behalf of the MISRA Consortium.