ソース・コード記述の第一歩 ―― 組み込み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  »
組み込みキャッチアップ
お知らせ 一覧を見る

《半導体ネット もうすぐ1周年記念》,「HDL文法ガイド」を抽選で100名様にプレゼント!

4/24(土),東京・秋葉原にて電子&工作系イベント「エレキジャック・フォーラム」開催.受講・入場登録受付中!

《読者の広場》皆さまから寄せられた「ひと口コメント」 Part6 ―― あなたがお薦めのiPhoneアプリの名前は?

PICK UP用語

USB

関連記事

volatile

関連記事

Verilog HDL

関連記事

ニュース

Rohde & Schwarz,測定周波数が3GHzながら80.9万円と安いスペクトラム・アナライザを発売

Agilent,CANやLIN,I2Cなどのシリアル通信の解析を得意とするオシロスコープを発売

Actel,Cortex-M3プロセッサをハード・マクロで搭載するFPGAを発売

ヒューマンデータ,Virtex-5を搭載するFPGAボードを発売

グレープシステム,組み込み用の暗号エンジンを発売

組み込みブログ

組み込み場外乱闘

移転のお知らせ

2009年5月29日

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

【ETロボコン】 北関東説明会を実施。ついに新潟に上陸!!

2010年3月15日

Hamana Project

実行委員会ペイロード

2009年9月27日