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 のサポート |
---|---|---|---|
5.1 | 必要 | 準拠:
| あり |
5.2 | 必要 | 準拠:
| あり |
5.4 | 必要 | 準拠:
| あり |
5.5 | 必要 | 準拠:
| あり |
5.6 | 必要 | 準拠:
| あり |
5.7 | 必要 | 準拠:
| あり |
5.8 | 必要 | 準拠:
| あり |
"リテラルと定数" MISRA C:2012 ルール
"宣言と定義" MISRA C:2012 ルール
"初期化" 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 ルール
"ポインター型の変換" 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 ルール
"制御フロー" MISRA C:2012 ルール
"switch ステートメント" MISRA C:2012 ルール
"関数" MISRA C:2012 ルール
"ポインターと配列" 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 つを選択します。
定義済みのビットフィールドを含むカスタム ストレージ クラスを作成します。詳細については、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 に違反していることを示します。