Main Content

MISRA C:2012 準拠情報の概要表

MathWorks® は、Simulink® モデルおよび Stateflow® チャートから Embedded Coder® で生成された C コードを MISRA C:2012 コーディング規約に照らして評価しています。この取り組みの結果を、以下の準拠概要表で参照できます。これらの表には、以下が記載されています。

  • 準拠を実現するために使用する方法:

    • 準拠: ルール/命令への準拠は、コード生成プロセス、モデリング ガイドライン、またはモデル アドバイザー チェックに従うことで実現します。該当する場合は、命令またはルールを満たすために実行できる準拠方法やアクションに関連する情報を示す説明メモがあります。

    • 逸脱: ルールまたは命令は準拠していません。

  • Polyspace® MISRA C:2012 チェッカーがルールまたは命令をサポートするかどうか。

これらの表は、『MISRA C:2012 Guidelines for the Use of C Language in Critical Systems』ドキュメントの 5.3 節に従って必要に応じてプロジェクトの MISRA C:2012 準拠表明を準備する際に使用できます。これらの表は、公開されている MISRA C:2012 ルールおよび命令表と一致します。表内のカテゴリは、自動生成コード用に記載された MISRA ガイドラインの付録 E に基づいています。必須カテゴリと必要カテゴリの場合のみ使用できます (勧告カテゴリと可読性カテゴリの場合は使用できません)。

MISRA C:2012 メイン ドキュメント

"実装" MISRA C:2012 命令

命令カテゴリ準拠Polyspace のサポート
1.1必要

準拠:

一部サポートあり

"コンパイルとビルド" MISRA C:2012 命令

命令カテゴリ準拠Polyspace のサポート
2.1必要準拠あり

"要件のトレーサビリティ" MISRA C:2012 命令

命令カテゴリ準拠Polyspace のサポート
3.1必要

準拠:

なし

"コード設計" MISRA C:2012 命令

命令カテゴリ準拠Polyspace のサポート
4.1必要

準拠:

あり
4.3必要

準拠:

なし
4.6勧告

適用不可。

N/A
4.7必要

準拠:

逸脱:

ありa
4.10必要準拠あり
4.11必要

準拠:

あり
4.12必要

準拠:

なし

a The Polyspace MISRA C:2012 Checker might flag Directive 4.7 as a Rule 17.7 violation (Polyspace Bug Finder) for user-defined functions when there is no knowledge about whether the return value contains error information.

"標準 C 環境" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
1.1必要準拠あり
1.3必要準拠あり

"未使用コード" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
2.1必要

準拠:

あり
2.2必要準拠あり

"コメント" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
3.1必要

準拠:

あり
3.2必要準拠あり

"文字セットと字句規則" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
4.1必要準拠あり

"型" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
6.1必要

準拠:

あり
6.2必要

準拠:

あり

"リテラルと定数" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
7.1勧告準拠あり
7.2可読性準拠あり
7.4必要準拠あり

a Guideline suggests Rule 7.1 and 7.2 as Required for manually generated code.

"宣言と定義" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
8.1必要準拠あり
8.2必要準拠あり
8.3必要準拠あり
8.6必要準拠あり
8.8必要準拠あり
8.10必要準拠あり
8.12必要

準拠:

あり
8.14勧告準拠あり

a Guideline suggests Rule 8.14 as Required for manually generated code.

"初期化" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
9.1必須

準拠:

あり
9.4必要準拠あり
9.5可読性準拠あり

a Guideline suggests Rule 9.5 as Required for manually generated code.

"実質的な型モデル" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
10.2勧告準拠あり
10.3勧告準拠あり

a Guideline suggests Rule 10.2 and 10.3 as Required for manually generated code.

"ポインター型の変換" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
11.1必要準拠あり
11.2必要準拠あり
11.3必要

準拠:

あり
11.6必要準拠あり
11.7必要準拠あり
11.8必要

準拠:

あり

"式" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
12.2必要準拠あり

"副作用" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
13.1必要準拠あり
13.2必要

準拠:

あり
13.5必要

準拠:

逸脱:

あり
13.6必須準拠あり

"コントロール ステートメントの式" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
14.2可読性

準拠:

あり
14.3必要

準拠:

あり

a Guideline suggests Rule 14.2 as Required for manually generated code.

"制御フロー" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
15.2勧告準拠あり
15.3勧告準拠あり
15.6必要準拠あり
15.7可読性準拠あり

a Guideline suggests Rule 15.2, 15.3 and 15.7 as Required for manually generated code.

"switch ステートメント" MISRA C:2012 ルール

ルールカテゴリa準拠Polyspace のサポート
16.2勧告準拠あり
16.3勧告準拠あり
16.4勧告

準拠:

あり
16.5勧告準拠あり
16.6勧告準拠あり
16.7勧告準拠あり

a Guideline suggests Rule 16.2, 16.3, 16.4, 16.5, 16.6 and 16.7 as Required for manually generated code.

"関数" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
17.1必要準拠あり
17.2必要

準拠:

あり
17.3必須準拠あり
17.4必須準拠あり
17.6必須準拠あり

"ポインターと配列" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
18.1必要準拠あり
18.2必要準拠あり
18.3必要準拠あり
18.6必要準拠あり
18.7必要準拠あり
18.8必要準拠あり

"重複するストレージ" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
19.1必須準拠あり

"プリプロセッサ命令" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
20.2必要準拠あり
20.3必要準拠あり
20.4必要準拠あり
20.6必要準拠あり
20.7必要準拠あり
20.9必要準拠あり
20.11必要準拠あり
20.12必要準拠あり
20.13必要準拠あり
20.14必要準拠あり

"標準ライブラリ" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
21.1必要準拠あり
21.2必要

準拠:

あり
21.3必要

準拠:

あり
21.4必要準拠あり
21.5必要準拠あり
21.6必要

準拠:

あり
21.7必要準拠あり
21.8必要準拠あり
21.9必要準拠あり
21.10必要準拠あり
21.11必要準拠あり
21.12必要準拠あり

"リソース" MISRA C:2012 ルール

ルールカテゴリ準拠Polyspace のサポート
22.1必要準拠あり
22.2必須準拠あり
22.3必要準拠あり
22.4必須準拠あり
22.5必須準拠あり
22.6必須準拠あり

MISRA C:2012 Amendment 1

"コード設計" MISRA C:2012 Amendment 1 命令

命令カテゴリ準拠Polyspace のサポート
4.14必要準拠あり

"式" MISRA C:2012 Amendment 1 ルール

命令カテゴリ準拠Polyspace のサポート
12.5必須準拠あり

"標準ライブラリ" MISRA C:2012 Amendment 1 ルール

命令カテゴリ準拠Polyspace のサポート
21.13必須準拠あり
21.14必要準拠あり
21.15必要準拠あり
21.16必要準拠あり
21.17必須準拠あり
21.18必須準拠あり
21.19必須準拠あり
21.20必須準拠あり

"リソース" MISRA C:2012 Amendment 1 ルール

命令カテゴリ準拠Polyspace のサポート
22.7必要準拠あり
22.8必要準拠あり
22.9必要準拠あり
22.10必要準拠あり

MISRA C:2012 Amendment 2

"標準 C 環境" MISRA C:2012 Amendment 2 ルール

命令カテゴリ準拠Polyspace のサポート
1.4必要準拠あり

"標準ライブラリ" MISRA C:2012 Amendment 2 ルール

命令カテゴリ準拠Polyspace のサポート
21.21必要準拠あり

説明メモ

次の説明メモはMISRA C:2012 準拠情報の概要表から参照されるものです。

命令 1.1 に関する説明メモ

Embedded Coder の処理系定義の動作については、ランタイム環境オプションの構成を参照してください。コンパイラのドキュメンテーションはスコープ外です。

文字セット エンコードは SavedCharacterEncoding モデル パラメーターを使用して管理します。詳細については、slCharacterEncoding を参照してください。

[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [ハードウェア実行] ペインで、整数除算方法を構成します。詳細については、ランタイム環境オプションの構成を参照してください。

Embedded Coder は、ユーザーが以下を行うと #pragma を生成します。

どちらの場合も、#pragma の用途をドキュメント化する必要があります。詳細については、Control Data and Function Placement in Memory by Inserting Pragmasを参照してください。

ビットフィールドの生成を有効にするには、次のようにします。

  1. 次のモデル コンフィギュレーション パラメーターのうち少なくとも 1 つを選択します。

  2. 定義済みのビットフィールドを含むカスタム ストレージ クラスを作成します。詳細については、Create Storage Classes by Using the Custom Storage Class Designerを参照してください。

モデルで、あるデータ型から別のデータ型への変換が使用されている場合、Polyspace チェッカーはモデルの生成コードから命令 1.1 の違反を示します。この場合、モデルから検出された違反は、この明示的な変換を MISRA ガイドラインに従ってドキュメント化している場合は問題となりません。

MISRA 命令 3.1 に関する説明メモ

要件とモデル要素をリンクできます。このようなリンクを生成された C コードに含めて、要件ドキュメントからモデル要素および生成コードへのトレーサビリティを提供します。詳細については、モデル要素に関連付けられている Requirements Toolbox リンクの表示およびブロックと要件のリンク (Requirements Toolbox)を参照してください。

命令 4.1 に関する説明メモ

Polyspace Bug Finder™ を使用してランタイム エラーを特定でき、Polyspace Code Prover™ を使用してランタイム エラーがないことを証明できます。詳細については、以下を参照してください。

Simulink Design Verifier を使用して、設計エラーをモデル レベルで検出できます。詳細については、モデルにおける設計エラーの解析 (Simulink Design Verifier)を参照してください。

オーバーフロー違反を処理するには、Simulink モデルでのオーバーフローの処理 (Fixed-Point Designer)を参照してください。

命令 4.3 に関する説明メモ

Embedded Coder はアセンブリ言語コードを直接呼び出しません。S-Function、コード置換ライブラリ、Stateflow、および MATLAB® ブロックでアセンブリ言語関数の呼び出しを追加できます。これらの呼び出しはExternal C Functionsの呼び出しとしてドキュメント化します。このような場合、カプセル化を行う必要があります。

詳細については、以下を参照してください。

命令 4.6 に関する説明メモ

Embedded Coder は、基本データ型を命令 4.6 と互換性のある typedef 型に置き換えます。この動作は Embedded Coder の既定の動作であるため、ガイドラインは不要です。詳細については、Replace and Rename Simulink Coder Data Types to Conform to Coding Standardsおよび Typedef を参照してください。

命令 4.11 に関する説明メモ

この命令の要件は以下により満たされます。

入力パラメーターが無効な値を受け取れないことを静的に実証する。

Polyspace Code Prover を使用してパラメーター範囲を解析し、値が範囲外であるために発生するランタイム エラーがないことを証明できます。詳細については、Embedded Coder によって生成されたコードに対する Polyspace 解析の実行 (Polyspace Code Prover)を参照してください。

ルール 2.1 に関する説明メモ

Embedded Coder は、Stateflow のユーザー定義コードをチェックしません。報告される違反に対処する必要があります。

ルール 5.1、5.2、5.4、5.5、5.6、5.7 および 5.8 に関する説明メモ

Embedded Coder は、実装によって設定される文字数を制限するよう構成できます。詳細については、[識別子の最大の長さ] を参照してください。

変数のタイプ (ローカル スコープ変数、グローバル スコープ変数、マクロなど) ごとに一意の名前を確保するには、命名規則を実装します。詳細については、[モデル コンフィギュレーション パラメーター: コード生成識別子] を参照してください。

長い識別子の場合は、共有ユーティリティを使用することをお勧めします。詳細については、共有ユーティリティ コードの生成を参照してください。

ルール 8.12 に関する説明メモ

Embedded Coder は列挙データの使用をサポートしています。列挙の定義に使用するファイルは手動でも自動でも生成できます。Embedded Coder によって生成された列挙を定義するファイルは、設計上 MISRA C:2012 ルール 8.12 に準拠しています。定義ファイルを手動で作成する場合、準拠を確保する必要があります。詳細については、Simulink モデルでの列挙型データの使用を参照してください。

ルール 11.8 に関する説明メモ

モデルで使用している Simulink.Signal または Simulink.Parameter のストレージ クラスに修飾子 Const または Volatile が設定されている場合、Polyspace チェッカーはモデルの生成コードがルール 11.8 に違反していることを示します。