連載
» 2006年10月12日 00時00分 UPDATE

H8で学ぶマイコン開発入門(2):組み込みソフトウェア開発はC言語が主流だ (3/3)

[山本 繁寿 ソフィアシステムズ,@IT MONOist]
前のページへ 1|2|3       

移植性が高い

 前述したように、高級言語でプログラミングすれば、プラットフォームが変わっても、同じ記述で同じ処理が可能です。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言語を高級言語として扱いました。しかし、C言語は高級言語ではないとする考え方もあります。理由の1つは、C言語はデータの入出力処理を言語仕様として実装していないためです。C言語でデータの入出力を行う場合、ライブラリの助けが必要です。これに対してC++は、言語仕様として入出力処理が実装されています。前回のコラムでも書きましたが、人間の数だけ考え方があり、用語の定義や意味だけにとどまらず、考え方自体にも多様性があるということは、常に念頭に置いておいた方がよいと思います。




 C言語で記述したプログラムを実機で動作させるためには、テキストデータを最終的にマイコンが理解できる機械語に変換(翻訳)する必要があります。次回は、組み込みC言語で使われるクロス開発環境について解説します。(次回に続く)


前のページへ 1|2|3       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.