こんにちは、TMIHです。
今回から組み込み系のソフトウェア設計標準規格である、MISRA-Cについて説明していきたいと思います。
MISRA-Cはコード品質などの観点から、実際にコーディングルールの指標としている会社も多いのではないでしょうか。
ご存じの方も多いと思いますが、まずはMISRA-Cについて簡単にご紹介したいと思います。
MISRA-Cとは
MISRA(Motor Industry Software Reliability Association)が1998年に発行したC言語向けの規格です。
初版発行後から改訂が重ねられており、車載ソフトウェア開発向けに多く使用されています。
改訂に伴い、MISRA-Cのルールやカテゴリーが追加されて使いやすさが向上されています。
MISRA-Cの改訂履歴を以下に記載します。
改訂履歴 | 詳細 |
---|---|
MISRA-C:1998 | 1998年に発行。基にしているC言語規格はC90。 |
MISRA-C:2004 | 2004年に改訂。基にしているC言語規格はC90。 |
MISRA-C:2012 | 2013年に改訂。基にしているC言語規格はC90、C99。 |
MISRA-Cのルールには、”必要(Required)”と”推奨(Advisory)”の2つのカテゴリーが存在します。
MISRA-C:2012では3つ目のカテゴリーとして、”必須(Mandatory)”が追加されました。
カテゴリーごとの説明を以下に記載します。
カテゴリー | 詳細 |
---|---|
必要ルール | “強制的な”要求。ルールに従えない場合は、正式な逸脱の手順が必要。 |
推奨ルール | “通常従う方がよい”要求。ルールに従えなくても、逸脱の手順は不要。 |
必須ルール | “強制的な”要求。逸脱することが許されず、必ず準拠しなければならない。 |
MISRA-Cに準拠するメリット
C言語はプログラム記述に対する自由度が高いため、コンパイル時や実行時のチェック機能が弱く、
機能安全に関しては推奨できない言語という評価がなされています。
そのような中で、MISRAがC言語の実用性を確保しつつ、安全性、信頼性、移植性の高いC言語のサブセットとして、
自動車に搭載するソフトウェア向けのガイドラインを発行しました。
そのため、MISRA-Cのルールに準拠することで安全性、信頼性、移植性が確保されたソフトを作成することができ、
高い安全性を求められる組み込み系のソフトウェアに対して特に有効となります。
MISRA-Cのルールは上記のような背景で作成されているため、
ルールを知っておくとC言語以外の言語でソフトウェアを作成する時でも、
安全性の向上に繋げることができます。
また、MISRA-C++という、C++言語用の規格もあります。
サンプルプログラム
ソフトウェア開発環境の主流となっている、MISRA-C:2004の中からあるルールに着目して、
サンプルプログラムを組んでみたいと思います。
ルールNo. | 6.1 |
カテゴリー | 必要 |
内容 | 単なるchar型は、文字データの格納及び使用に限って用いなければならない。 |
詳細 | 単なるchar型は、処理系によって符号付きで扱われる場合、符号なしで扱われる場合がある。 そのため、符号の扱いが異なる処理系に移植した際に、予測しない動作をする可能性がある。 よって、単なるchar型は符号の問題がない文字データに限って使用する。 |
・サンプルプログラム1
void func(void)
{
char a;
signed char b;
unsigned char c;
a = 1;
b = -2;
c = 5;
}
7行目では文字データ以外の値を単なるchar型に代入しているため、ルール6.1から逸脱していることになります。
数値を扱いたい場合は、”signed char型”または”unsigned char型”の変数を用意して代入する必要があります。
・サンプルプログラム2
void func(void)
{
char a;
signed char b;
unsigned char c;
a = 'A';
b = -2;
c = 5;
}
7行目では文字データを単なるchar型に代入しているため、ルール6.1に準拠していることになります。
次回
今回は、MISRA-Cの紹介とルールに準拠したサンプルプログラムを紹介しました。
次回は、MISRA-Cのルールに準拠したサンプルプログラムと必要ルールから逸脱を余儀なくされた時の手順を紹介します。
引用・参考文献
「組込み開発者におくるMISRA-C:2004 C言語利用の高信頼化ガイド」、MISRA-C 研究会編、ISBN 9784542503342、日本規格協会

主に組み込み系を担当。食べることが趣味
関連記事
-
第1回 ラズパイを使用したBLE通信 ~ ディスプレイ、キーボード、マウスを接続しないで設定 前編 ~
こんにちは、GTです。よろしくお願いします。 最近業務でラズパイのBluetooth機能を使...
公開日:2021.12.24 更新日:2021.12.24
tag : Raspberry Pi Bluetooth
-
WindowsにおけるPyCharm+GITの開発環境のセットアップ方法
こんにちは!ソラです。 Python、ラズパイのお仕事が増えてきています。 ありがたいことで...
公開日:2021.06.30 更新日:2021.08.03
tag : Raspberry Pi IoT
-
第3回 顔認識デバイス Android編 〜 LiveDataとDataBindingを実装する 〜
前回に引き続き、MVVMの実装をしていきます。 ViewModelの実装では、UIの状態管理...
公開日:2021.08.19 更新日:2021.09.08
-
第4回 顔認識デバイス Android編 〜 ラズパイとの通信 〜
こんにちは! 本記事を担当します KNSK と申します。 よろしくお願いします! 今回はAn...
公開日:2021.09.09 更新日:2021.09.09
-
第2回 顔認識デバイス Android編 〜 JetPackを使ってViewModelを実装する 〜
最近のAndroidアプリはJetPackライブラリが浸透してきたこともあり、MVVMを使う...
公開日:2021.07.19 更新日:2021.07.19
-
こんにちは、TMIHです。 今回から組み込み系のソフトウェア設計標準規格である、MISRA-...
公開日:2022.02.25 更新日:2022.02.25