ソース・コード記述の第一歩 ―― 組み込みCの"Hello World!"

山際 伸一

C言語について少しでも知識のある方であれば,最初に勉強した"Hello World!"を覚えていると思います.組み込みシステムをターゲットとするC言語記述の第一歩として,組み込みC言語の"Hello World!"を説明します.これは1個のLEDを点灯するものです.(編集部)

 C言語の基本中の基本の事柄をおさらいします.LEDを単純に点灯するソフトウェアを例に説明します. ここでは,ハードウェアの電気的な特性などについては説明しません.まずは組み込みシステム向けソフトウェアのC言語による記述を覚えてください.そして,ハードウェアを制御している,ということを感覚で覚えてください.

1. 二つのHello World!を比較する

 C言語をはじめとするプログラミング言語の入門書で最初に説明されるコードとして,"Hello World!"があります.ほとんどの方は,C言語を大学の授業や会社の新入社員教育で勉強されたことがあると思いますから,きっと覚えていることでしょう.

 画面に"Hello World!"と表示するだけの簡単なソフトウェアのソース・コードをリスト1に示します.C言語の基本として思い出してください.


リスト1 一般的なC言語のHello World!


 組み込みC言語における"Hello World!"を考えます.文字を表示するためのデバイスを持たない機器は多いので,代わりにLEDを点灯させることにします.1個のLEDを点灯するソフトウェアのソース・コードをリスト2に示します.


リスト2 組み込みC言語のHello World!


 リスト1リスト2で,一般的なC言語のソース・コードと,組み込みシステム向けC言語のソース・コードを比較します.

● 表示するという目的は同じ

 リスト1は,パソコンのディスプレイなどに文字を表示します.リスト2は,LEDを点灯します.対象は異なりますが,何かを表示するという点で,機能は一致しています(図1).


(a)一般的なC言語のHello World!の実行結果

 



(b) 組み込みC言語のHello World!の実行結果


図1 一般的なC言語と組み込みC言語のHello World!の操作
一般的なC言語のHello World!はパソコンの画面のような出力場所に文字を表示する.組み込みC言語のHello WorldはLEDを点灯する.何かを表示するという機能は一致している

 

● 表示のための関数を使う準備をする

 リスト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です.



図2 一般的なC言語と組み込みC言語のHello World!の違い
組み込みシステム向けのソフトウェアでは,main関数が終わらないようにしなければならない.

 

1  2  »
組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日