組み込みソフトウェア開発はC言語が主流だ:H8で学ぶマイコン開発入門(2)(3/3 ページ)
C言語が組み込み開発の主流となったのはなぜか。機械語、アセンブリ言語などとの比較から、C言語が支持される理由を解説しよう。
移植性が高い
前述したように、高級言語でプログラミングすれば、プラットフォームが変わっても、同じ記述で同じ処理が可能です。C言語は高級言語に属するため、移植性に優れています。以下は、変数xを0で初期化した後、xが10になるまでxの値を増加させるプログラムです。
main()
{
char x;
for (x = 0; x < 10; x++)
;
}
これをH8/300H専用アセンブリ言語で記述すると、以下のようになります。
_main:
PUSH.L ER6
MOV.L SP,ER6
SUBS.L #2,SP
SUB.B R0L,R0L
MOV.B R0L,@(-1:16,ER6)
BRA L7:8
L6:
MOV.B @(-1:16,ER6),R0L
INC.B R0L
MOV.B R0L,@(-1:16,ER6)
L7:
MOV.B @(-1:16,ER6),R0L
CMP.B #10,R0L
BLT L6:8
ADDS.L #2,SP
POP.L ER6
RTS
また、SH用アセンブリ言語で記述すると、以下のようになります。
_main:
ADD #-4,R15
MOV #0,R3
MOV R3,R0
MOV.B R0,@(3,R15)
BRA L207
NOP
L208:
MOV.B @(3,R15),R0
MOV R0,R2
ADD #1,R2
MOV R2,R0
MOV.B R0,@(3,R15)
L207:
MOV.B @(3,R15),R0
MOV R0,R3
MOV #10,R2
CMP/GE R2,R3
BF L208
ADD #4,R15
RTS
NOP
H8/300HとSHは同じルネサス製のマイコンのため、設計思想で共通点があります。しかし、同じプログラムをARMマイコンで実現しようとしたら、アセンブリ言語はまったく異なります。以下は、ARMマイコンの場合のアセンブリ言語です。
.text
.align 0
.global _main
_main:
mov ip,sp
stmfd sp!,{fp,ip,lr,pc}
sub fp,ip,#4
bl ___gccmain
ldr r3,.L3
mov r1,#16
mov r2,r1@movhi
strh r2,[r3, #0] @movhi
b .L2
.L4:
.align 0
.L3:
.word _xyz
.L2:
.L1:
ldmea fp,{fp,sp,pc}
.comm _xyz,4@2
このように、アセンブリ言語でプログラミングしていると、マイコンが変わるたびに命令セットを覚え直さなければならず、移植のためには多大な工数が必要となります。C言語を使うことで、マイコンのアーキテクチャの違いは、コンパイラが吸収してくれます。
開発効率が高い
一般的に新規にプログラムをコーディングする場合、プログラマが書けるステップ数は1日当たり1000行程度といわれています。先ほどのリストにあるように、C言語の1行は、アセンブリ言語の数十行に匹敵します。従って単純計算で考えると、C言語はアセンブリ言語と比較して数倍のスピードでコーディングができるわけです。
また、人間は細心の注意を払っていても、どこかで必ずミスをします。複雑なアセンブリ言語の場合、例えばロングワードサイズ(MOV.L)でデータを転送するべきところをバイトサイズ(MOV.B)で転送してしまうと、プログラムは動作しません。細かい部分はコンパイラに任せ、ステップ数をできるだけ減らすことにより、不具合が発生する率を下げることも、C言語を使うメリットです。
学習、習得のしやさ
前述のようにC言語は、英語表記で記述します。C言語で使われる英語は限られていますので、英語が苦手な方でも比較的、なじみやすいと思います。また、本屋に行けばC言語に関する書籍が簡単に手に入ります。インターネット上にもC言語に関する情報はあふれています。このようにC言語は独学で習得するには、最適な開発言語といえます。
現実的問題
プログラミング言語にはC言語以外にも多くの優れた言語があります。しかし、それらの言語を使うために、特別な開発環境が必要であったり、入手するために多大な出費を強いられる場合があります。これに対してC言語の場合、適当なスペックを満たすパソコンがあれば動作します。
またGNUツールに代表される、フリーの開発環境もあります。また、高級化が進み、言語体系が抽象化されると移植性は良くなりますが、あまりに抽象化され過ぎると言語自体を理解するのに時間がかかる、システムに実装したときに動作が遅くなるなどの弊害が生じます。これらを総合的に判断すると、C言語は開発言語として使いやすく、敷居の低い部類に属します。
C言語で記述したプログラムを実機で動作させるためには、テキストデータを最終的にマイコンが理解できる機械語に変換(翻訳)する必要があります。次回は、組み込みC言語で使われるクロス開発環境について解説します。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.