Misra Example Suite at docker コンパイル完了までの道のり。docker(154)


MISRA C:2012 Example-Suite
https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite

コンパイル完了までの道のり

道のり1. docker の導入

下記、docker コマンドで[user]を実際のフォルダ名で実行。まず、GCCでコンパイルすることを考えてGCCの正規版を導入。

macOS
$ docker run -v /Users/[user]/Downloads/misra:/tmp/misra -it gcc /bin/bash

PC側のエディタ使って編集するのでフォルダを共有してます。

道のり2 ダウンロード

# cd /tmp/misra
# git clone https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite.git
# cd Example-Suite/

3. 道のり3 Clang(llvm)導入

あとからでもいいけど、導入しながら別の作業をできる。

docker
# apt update; apt -y upgrade
# apt install -y vim wget sudo apt-utils curl clang

4. 構造調査

ファイル名一覧

D_01_01.c D_01_support.c D_01_system.c D_02_01.c D_02_support.c D_02_system.c D_03_01.c D_03_support.c D_03_system.c D_04_01.c D_04_01.h D_04_02.c D_04_03.c D_04_04.c D_04_05.c D_04_06.c D_04_07.c D_04_08.h D_04_08_1.c D_04_08_2.c D_04_09.c D_04_10.c D_04_10_1.h D_04_10_2.h D_04_10_3.h D_04_11.c D_04_12.c D_04_13.c D_04_13.h D_04_14.c D_04_support.c D_04_system.c README.md R_01_01.c R_01_02.c R_01_03.c R_01_support.c R_01_system.c R_02_01.h R_02_01_1.c R_02_01_2.c R_02_02.c R_02_02.h R_02_03.c R_02_03.h R_02_04.c R_02_04.h R_02_05.c R_02_05.h R_02_06.c R_02_07.c R_02_support.c R_02_system.c R_03_01.c R_03_02.c R_03_support.c R_03_system.c R_04_01.c R_04_02.c R_04_support.c R_04_system.c R_05_01.h R_05_01_1.c R_05_01_2.c R_05_02.c R_05_03.c R_05_03.h R_05_04.c R_05_05.c R_05_06.c R_05_06.h R_05_07.c R_05_07.h R_05_08.h R_05_08_1.c R_05_08_2.c R_05_09.h R_05_09_1.c R_05_09_2.c R_05_support.c R_05_system.c R_06_01.c R_06_02.c R_06_support.c R_06_system.c R_07_01.c R_07_02.c R_07_03.c R_07_04.c R_07_04.h R_07_support.c R_07_system.c R_08_01.c R_08_02.c R_08_03.c R_08_03.h R_08_04.c R_08_04.h R_08_05.h R_08_05_1.c R_08_05_2.c R_08_06.h R_08_06_1.c R_08_06_2.c R_08_07.h R_08_07_1.c R_08_07_2.c R_08_08.c R_08_09.c R_08_09.h R_08_10.c R_08_11.h R_08_11_1.c R_08_11_2.c R_08_12.c R_08_13.h R_08_13_1.c R_08_13_2.c R_08_14.c R_08_support.c R_08_system.c R_09_01.c R_09_01.h R_09_02.c R_09_03.c R_09_04.c R_09_05.c R_09_support.c R_09_system.c R_10_01.c R_10_02.c R_10_03.c R_10_04.c R_10_04.h R_10_05.c R_10_06.c R_10_07.c R_10_08.c R_10_support.c R_10_system.c R_11_01.c R_11_02.c R_11_03.c R_11_04.c R_11_05.c R_11_06.c R_11_07.c R_11_08.c R_11_09.c R_11_support.c R_11_system.c R_12_01.c R_12_01.h R_12_02.c R_12_02.h R_12_03.c R_12_04.c R_12_05.c R_12_support.c R_12_system.c R_13_01.h R_13_01_1.c R_13_01_2.c R_13_02.c R_13_02.h R_13_03.c R_13_04.c R_13_05.h R_13_05_1.c R_13_05_2.c R_13_06.c R_13_support.c R_13_system.c R_14_01.c R_14_01.h R_14_02.c R_14_02.h R_14_03.c R_14_03.h R_14_04.c R_14_support.c R_14_system.c R_15_01.c R_15_02.c R_15_03.c R_15_04.c R_15_04.h R_15_05.c R_15_06.c R_15_06.h R_15_07.c R_15_07.h R_15_support.c R_15_system.c R_16_01.c R_16_02.c R_16_03.c R_16_04.c R_16_05.c R_16_06.c R_16_07.c R_16_support.c R_16_system.c R_17_01.c R_17_02.c R_17_02.h R_17_03.c R_17_04.c R_17_05.c R_17_05.h R_17_06.c R_17_07.c R_17_08.c R_17_08.h R_17_support.c R_17_system.c R_18_01.c R_18_01.h R_18_02.c R_18_02.h R_18_03.c R_18_03.h R_18_04.c R_18_05.c R_18_06.h R_18_06_1.c R_18_06_2.c R_18_07.c R_18_08.c R_18_support.c R_18_system.c R_19_01.c R_19_01.h R_19_02.c R_19_support.c R_19_system.c R_20_01.c R_20_01.h R_20_02.c R_20_03.c R_20_03.h R_20_04.c R_20_05.c R_20_06.c R_20_07.c R_20_08.c R_20_09.c R_20_10.c R_20_11.c R_20_12.c R_20_13.c R_20_14.c R_20_14_1.h R_20_14_2.h R_20_support.c R_20_system.c R_21_01.c R_21_02.c R_21_03.c R_21_04.c R_21_05.c R_21_06.c R_21_07.c R_21_08.c R_21_09.c R_21_10.c R_21_11.c R_21_12.c R_21_13.c R_21_14.c R_21_14.h R_21_15.c R_21_16.c R_21_17.c R_21_18.c R_21_19.c R_21_20.c R_21_support.c R_21_system.c R_22_01.c R_22_01.h R_22_02.c R_22_02.h R_22_03.c R_22_03.h R_22_04.c R_22_04.h R_22_05.c R_22_05.h R_22_06.c R_22_06.h R_22_07.c R_22_08.c R_22_09.c R_22_10.c R_22_support.c R_22_system.c mc3_header.h mc3_types.h

cat D_01_system.c

/*
* Release: 2016-11-01
*
* Example from MISRA C:2012 ( THIS IS NOT A TEST SUITE )
*
* Copyright HORIBA MIRA Limited.
*
* See file READ_ME.txt for full copyright, license and release instructions.
*/

include "mc3_types.h"

include "mc3_header.h"

int main ( void )
{
D_1_main_support ( );
return 0;
}

/* end of D_01_system.c */
```

xx_system.cをコンパイルして実行すればいいらんしい。

5. shell script作成

makeでもいいが、ひとまずshellで。

6. misra_c.h編集

これまでMISRAのコード断片や、C、C++の言語規格のコード断片をコンパイルするのに用いてきたヘッダファイルをvi で編集。

MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

途中経過

一つづつMISRAが作成した直したソースは別に解説します。
docker(201) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(1) D_04_03.c
https://qiita.com/kaizen_nagoya/items/780be9109348340e20e0

docker(202) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(2) R_02_02.c
https://qiita.com/kaizen_nagoya/items/496869b87dd3d29cea8b

docker(203) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(3) R_05_03.c
https://qiita.com/kaizen_nagoya/items/cb0d1da183f4f1e9e59d

docker(204) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(4) R_07_04.c
https://qiita.com/kaizen_nagoya/items/73b9f16638273a74d807

docker(205) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(5) R_08_04.c
https://qiita.com/kaizen_nagoya/items/c753db14cc95a9303fa5

docker(206) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(6) R_09_0x.c
https://qiita.com/kaizen_nagoya/items/8ad38c8728440688255c

docker(207) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(7) R_10_0x.c
https://qiita.com/kaizen_nagoya/items/05dd6f6c14aeafbe3e71

docker(208) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(8) R_11_0x.c
https://qiita.com/kaizen_nagoya/items/9962647a1b510825fa6e

docker(209) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(9) R_13_0x.c
https://qiita.com/kaizen_nagoya/items/dcd2de1267e3c3449536

docker(210) gcc(gnu), clang(llvm)コンパイルエラー・警告比較(10) R_14_0x.c
https://qiita.com/kaizen_nagoya/items/772f49486e7cca1dbeb9

道のり最後

作業結果をDocker hubに

macOS
$ docker push kaizenjapan/misra_c_2012_example

道のり最後の翌日

翌日続きをするには

$ docker run -v /Users/[user]/Downloads/misra:/tmp/misra -it kaizenjapan/misra_c_2012_example /bin/bash

MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

環境構築

docker gcc(g++) and llvm(clang++)
https://qiita.com/kaizen_nagoya/items/059874ea39c4de64c0f7

docker(40) Cコンパイラ3種をdockerで(その2)
https://qiita.com/kaizen_nagoya/items/8f5b7fd977597269a7e7

Preface

February 2020,
MISRA Compliance:2020
https://www.misra.org.uk/forum/viewtopic.php?f=241&t=1842
ISBN 978-1-906400-26-2

was published as second version.

August 2016,
MISRA Compliance:2016
https://www.misra.org.uk/forum/viewtopic.php?f=241&t=1561
was published first version.

I compare 2 documents and consider the difference.
And some propose are proposed.

Contents

Preface
Contents
Before MISRA
MISRA history
Comparison of MISRA Compliance:2016 and 2020

Before MISRA

MISRA history

Comparison 2016 and 2020

2020 word list

word count
the その 842
of 433
to 376
a a 369
be なる 265
and そして 223
is です 222
in 209
code 富豪 163
for ために 135
that それ 133
guidelines 指針 115
are 114
as なので 108
it それ 99
by 沿って 97
misra MISRA 96
with 95
compliance 順守 91
may 五月 88
guideline 指針 87
which どれ 80
or または 79
this この 75
not ない 74
deviation 偏差 71
an 63
tool 道具 59
process 処理する 58
project 事業 58
analysis 分析 56
required 必須 53
adopted 採用 52
compiler コンパイラ 52
will 意志 51
any どれか 48
been である 48
on 上に 47
rule 規則 47
have 持ってる 44
use 使用する 42
can できる 41
development 開発 41
there そこ 40
within 以内に 40
software ソフトウェア 39
violations 違反 39
when いつ 38
deviations 偏差 37
should すべき 37
c c 36
has 持っている 36
possible 可能 36
tools 道具 36
time 時間 35
example 34
if もし 34
language 言語 34
used 中古 34
re 31
requirements 要件 30
acquirer 取得者 29
these これら 29
some いくつか 27
static 静的 27
such そのような 27
supplier 供給者 27
compliant 準拠 26
from から 26
advisory 助言 25
but だが 25
quality 品質 25
violation 違反 25
mandatory 必須の 23
must しなければならない 23
standard 標準 23
at 22
source 22
system 22
all すべて 21
document 資料 20
following 以下 20
iso iso 19
only のみ 19
order 注文 19
other その他の 19
shall する 19
behaviour 動作 18
categorized 分類済 18
category 分類 18
developed 発展した 18
each 18
grp grp 18
level 水準 18
library 図書館 18
no 番号 18
section 18
where どこ 18
being であること 17
native 生来の 17
need 必要 17
organization 組織 17
record 記録 17
scope 範囲 17
also また 16
between の間に 16
defined 定義された 16
permits 許可 16
plan 予定 16
their 彼らの 16
they 彼ら 16
type 16
would するだろう 16
applied 適用済 15
b b 15
different 違う 15
does する 15
iec iec 15
issues 問題 15
metrics 測定基準 15
permit 許可 15
rules 規則 15
safety 安全性 15
therefore したがって 15
both 両方とも 14
case 場合 14
enforcement 執行 14
ensure 確保する 14
many たくさんの 14
more もっと 14
permitted 許可済 14
s s 14
systems 14
validation 検証 14
comply 従う 13
disapplied がっかりした 13
however しかしながら 13
implementation 実装 13
means 手段 13
one 1 13
same 同じ 13
appendix 付録 12
bit 二進数 12
categorization 分類 12
during 中に 12
header ヘッダ 12
necessary 必要 12
object 対象 12
style 12
approved 承認された 11
cannot できない 11
cases 事件 11
coding コーディング 11
configured 構成済み 11
described 説明した 11
documentation 文書化 11
expression 表情 11
files ファイル 11
identified 識別された 11
information 情報 11
its その 11
made 11
provide 提供する 11
provided 提供 11
review 見直し 11
security 安心 11
staff 要因 11
those それら 11
translation 翻訳 11
appropriate 適切な 10
available 利用可能 10
developer 開発者 10
essential 必須 10
even さえ 10
file ファイル 10
important 重要 10
make 作る 10
messages 伝言 10
multiplication 乗算 10
non 10
note 注意 10
operands 被作用子 10
processes 過程 10
reason 理由 10
records 記録 10
result 結果 10
reviewed 審査 10
then その後 10
undecidable 決定できない 10
using を使用して 10
version 10
wider 広い 10
without なし 10
additional 追加 9
apply 適用する 9
checking 確認する 9
control 制御 9
functional 機能的 9
gcs gcs 9
how どうやって 9
international 国際 9
macro 大きい 9
management 管理 9
produced 生産済 9
product 製品 9
programming プログラミング 9
run 走る 9
violated 違反した 9
analyser 分析者 8
associated 関連 8
checked 検査済み 8
checks 検査 8
claim 請求 8
compilers コンパイラ 8
composite 複合 8
do 行う 8
e e 8
every 8
form 8
given 所与 8
introduced 導入 8
message 伝言 8
might かもしれない 8
number 8
part 8
practice 練習 8
produce 作物 8
provides 提供する 8
set 設定する 8
single 単一 8
standardization 標準化 8
standards 規格 8
step 一歩 8
summary 概要 8
supported 支援済 8
two 8
value 8
various いろんな 8
versions 8
activities 活動 7
agreement 契約 7
binary 二進の 7
check 小切手 7
correct 正しい 7
could たぶん......だろう 7
define 定義する 7
dir dir 7
documents 書類 7
execution 実行 7
extensions 拡張 7
function 関数 7
include 含む 7
into 7
ltd 株式会社 7
most 最も 7
nature 自然 7
options 選択肢 7
performance 実績 7
program プログラム 7
providing 提供 7
related 関連した 7
report 報告する 7
require 必要とする 7
risk 危険 7
see 見る 7
significant 重要な 7
situations 状況 7
size 大きさ 7
so そう 7
specified 指定済 7
support 支援 7
task 仕事 7
testing 試験 7
training 訓練 7
uint uint 7
well 上手 7
whether かどうか 7
written 記録済 7
approach やり方 6
because なぜなら 6
capable 有能な 6
circumstances 状況 6
claimed 主張した 6
classification 分類 6
clearly はっきりと 6
consider 検討する 6
design 設計 6
diagnosis 診断 6
directive 指令 6
effort 努力 6
errors 謝り 6
exactly 丁度 6
examples 6
f f 6
guide 手引き 6
horiba 堀場 6
implement 実装する 6
included 含む 6
likely たぶん 6
limited 限定的 6
list 一覧 6
mira MIRA 6
outside 外側 6
over 以上 6
particular 特に 6
performed 実行した 6
phase 段階 6
place 場所 6
references 参照 6
simply 単に 6
since 以来 6
sometimes 時々 6
specific 明確な 6
t t 6
taken 取った 6
than より 6
types 6
understanding 理解 6
unit 単位 6
FALSE 6