ソース・コード記述の第一歩 ―― 組み込みCの"Hello World!"
tag: 組み込み ディジタル・デザイン
技術解説 2010年2月 5日
C言語について少しでも知識のある方であれば,最初に勉強した"Hello World!"を覚えていると思います.組み込みシステムをターゲットとするC言語記述の第一歩として,組み込みC言語の"Hello World!"を説明します.これは1個のLEDを点灯するものです.(編集部)
C言語の基本中の基本の事柄をおさらいします.LEDを単純に点灯するソフトウェアを例に説明します. ここでは,ハードウェアの電気的な特性などについては説明しません.まずは組み込みシステム向けソフトウェアのC言語による記述を覚えてください.そして,ハードウェアを制御している,ということを感覚で覚えてください.
1. 二つのHello World!を比較する
C言語をはじめとするプログラミング言語の入門書で最初に説明されるコードとして,"Hello World!"があります.ほとんどの方は,C言語を大学の授業や会社の新入社員教育で勉強されたことがあると思いますから,きっと覚えていることでしょう.
画面に"Hello World!"と表示するだけの簡単なソフトウェアのソース・コードをリスト1に示します.C言語の基本として思い出してください.
組み込みC言語における"Hello World!"を考えます.文字を表示するためのデバイスを持たない機器は多いので,代わりにLEDを点灯させることにします.1個のLEDを点灯するソフトウェアのソース・コードをリスト2に示します.
リスト1とリスト2で,一般的なC言語のソース・コードと,組み込みシステム向けC言語のソース・コードを比較します.
● 表示するという目的は同じ
リスト1は,パソコンのディスプレイなどに文字を表示します.リスト2は,LEDを点灯します.対象は異なりますが,何かを表示するという点で,機能は一致しています(図1).
.
● 表示のための関数を使う準備をする
リスト1では,C言語を使う上であらかじめ用意された関数を使うため,stdio.hというライブラリを読み込んでいます.
stdio.hというのは,パソコンのような汎用のシステムで使うことができるライブラリです.組み込みシステムでは,ハードウェアの構成が機器により異なるため,このライブラリを使うことはできません.
しかし,使用するマイコンが持つ周辺機能に合わせてあらかじめ用意されたライブラリを使える場合があります.リスト2では,用意されたライブラリcqlib.hを使う準備をしています.
使用するライブラリは異なりますが,あらかじめ用意されている関数を使う準備をしている,と思えば概念は同じです.
● 表示のための関数を呼び出す
リスト1では,printfという関数を使っています.これはパソコンのディスプレイのような,表示装置へ文字を出力する関数です.
一方,リスト2では,LED_ONという関数を使っています.これはマイコンのI/Oピンに接続されているLEDを点灯させる関数です.
制御対象のデバイスは,ディスプレイとLEDというように異なりますが,表示のための関数を呼び出すと思えば概念は同じです.
● 終了の仕方が異なる
リスト1は,returnで終わっています.これは,処理の終了を意味します.パソコンのような汎用のシステムでは,すべてのソフトウェアはWindowsのようなOSから呼び出されて実行されます.つまり,処理の終了によってOSに戻ることになります.
組み込みシステムでは,システムの起動後にmain関数が始まります.つまり,組み込みシステムにおけるmain関数では,終わった後の戻り場所はありません.つまり,main関数が終わってしまうと,戻る場所がないということです.そこで,while文で無限ループを作ったり,処理の頭に戻って処理を繰り返すようにして,main関数が終わらないようにします.
リスト2では,
while(1) {}
という無限ループを実行しています.この点が,組み込みシステム向けのソフトウェアの大きな特徴です.リスト1とリスト2の違いをフローチャートで示したのが図2です.