SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

コドモに伝える組込みソフトウェア開発

マジカルスプーンの設定

マイコンを動かしてみる


  • X ポスト
  • このエントリーをはてなブックマークに追加

 敷居の高さが感じられる「組込みソフトウェア」の開発。その理由の1つに、プログラミングの主力となる言語が「C言語」であることが挙げられます。そこで今回から、C言語の基本的な5つのルールだけを使って、組込み開発に踏み込んでいきます。まずは、一歩を踏み出してみませんか。  

  • X ポスト
  • このエントリーをはてなブックマークに追加

組込みの壁

 これまで2回にわたって二上先生、香山先生からマジカルスプーンの概要とその教育的意義について紹介をいただきました。本稿では、実際にマジカルスプーンのシステムを題材に、組込み(=マイコンで制御している)のプログラム作成にチャレンジしてみましょう。

 組込みソフトを学ぼうとするひとの前には、大きく2つの壁が立ちふさがります。まずひとつめが「C言語」です。書店には多くのC言語の解説書が並んでいますが、そのほとんどは

main()
{
	printf( "Hello World" );
}

 で始まります。

 パソコンであれば、これをコンパイルして実行すると画面に文字が現れます。しかし、組込みシステムでは、そもそも画面がないものがほとんどです。ここでまず出鼻をくじかれてしまいます。それでも頑張って読み進めると、不思議な演算子やら、C言語究極の壁と呼ばれるポインタ、そして最初は何に使うのかさっぱりわからない構造体など、次々と謎が初心者を襲います。

 またパソコンでは、コンパイルする環境と作ったプログラムを動作させる環境は同じです。しかし組込みでは、コンパイルするのはパソコンで、それを実際に動作させるのはマイコンの乗ったボード(回路基板)です。このようにプログラムを作るマシンと動作させるマシンが異なる開発環境を、「クロス開発環境」といいます。これも、慣れていないと勝手がわからず道に迷ってしまう要因となります。これら以外にも、パソコンのソフトウェアではまったく気にする必要のなかったことに気を配る必要もあります。たとえば、「main関数は誰が呼んでくれるのか」という問題です。

 このmain関数を呼び出す部分を、「スタートアップルーチン」といいます。いろいろなハードウェアの設定をして、main関数を呼び出します。ハードウェアの設定をするからには、ハードウェアごと(CPUごと)に固有のプログラムが必要です。したがって、組込みソフトウェアでは、そこもプログラム設計者が意識する必要があるのです。

 もうひとつの大きな壁が「ハードウェア制御」です。パソコンなどではOSというソフトウェアがハードウェアにうまく覆いをかけて、なおかつ便利なサービスを提供してくれています。たとえば、さきほどのprintfも、「カーソル位置に1文字出力する」というサービスを利用することで、出力先がノートの液晶だろうと外部モニタだろうと気にせず動作させることができているわけです。組込みシステムではどうでしょうか。図1は組込みシステムでのソフトウェアの一般的な構造を簡単に示したものです。

図1:組込みソフトウェアの一般構造
図1:組込みソフトウェアの一般構造

 一番上のアプリケーションという部分が、そのシステムで実際にやりたい仕事のプログラムです。二番目のミドルウェアというのは、アプリケーションを実現するために必要な処理ライブラリのようなものです。たとえば、画像や音声の圧縮伸長などの処理はここにあたります。その下にOSとデバイスドライバがあります。組込みシステムでも、このようにOSが搭載されていることは珍しくはありません。しかし用意されているサービスは、ほとんどの場合、タスク(ソフトウェアにおける仕事の単位)や記憶領域、時間などの管理が主です。特定のハードウェアに固有の、たとえば「5番目のランプを灯す」といった機能は、標準的に用意されることはありません。たとえOSに便利なサービスが用意されていたとしても、それが特定のハードウェアできちんと動作するようにするには、そのハードウェアに合ったデバイスドライバと呼ばれるハードウェアの制御プログラムを用意する必要があります。パソコンでも新しいハードウェアにはハードウェアベンダからデバイスドライバが供給されて、ユーザはそれをOSに組み込みますね。つまり「誰か」が、ハードウェアを制御するプログラムを作ってくれているわけです。組込みソフトウェアに挑戦しようとすると、「誰か」ではなく「自分が」自分の目的と使用するハードウェアにマッチしたデバイスドライバプログラムを作らなければならなくなります。

 ソフトウェアに限らず、技術物は、実際に動作させてみて、トライ&エラーを繰り返して学ぶのが近道です。組込みソフトの場合、ちょっと動作させてみるにも、マイコンボードから専用の開発ツールまで揃えて環境を整備する必要があります。このアプローチは、入門者にとっておっくうになってしまいがちです。さらには学ぶ必要のあることがソフトウェアにとどまらずハードウェアにまで及んでしまうため、手強く感じてしまいます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
5つのC言語ルールではじめよう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
コドモに伝える組込みソフトウェア開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

NECマイクロシステム株式会社 勤務NPO法人SESSAME 所属開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3797 2009/04/03 11:12

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング