コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark

組み込み開発における開発手法のひとつ、について。

組み込みのマイコンにおけるソフトウェア開発も、コードがある程度の規模になってくるとだんだん面倒になってくる。
主な理由がターゲットへのダウンロードと、ターゲットデバッグによるのだが、大抵の場合はダウンロードに時間がかかったりターゲットデバッグに苦労させられたりする。特にデバッグの様な頻繁にチェック&エディットが必要なターンに、毎回ダウンロードしていたのでは結構な時間を消費してしまう事になる。
そういった場面を想定して上手いこと開発を行うにはどうしたら良いのだろうかというのは、開発者のスキルの見せ所なのではないだろうか。

私はできるだけ PC 上で開発するようにしている。
PC上であれば高速にコーディングやデバッグができるので、かなり理想的な開発速度を得ることができる。
ではどうやって?

V850_interface
これが今回 V850 上で作成したコメベーダーの概略図。
インベーダーゲームを作成するのに必要な要素として考えると「画像」「音声」「入力」の三つであることがわかる。そしてそれぞれの要素を用意していたわけだが、それらの動作を司るルーチンとして “kome_*_drv” というルーチンを用意して処理をまとめてある。
そこより上位のコードにおいてはこれらドライバルーチン「だけ」を介してシステムリソースにアクセスする形に抽象化することで、ハードウェアの仕様を「ある程度」忘れることができる。そのことによって、上位コードはインベーダーゲームというアプリケーションの実現のみに思考を割くことができるというわけ。

さて、上の図を眺めていて欲しい。
上位のコードはドライバルーチンのみをコールしているので、ターゲットへの依存性は無くなっている。ハードウェアをドライバルーチンが抽象化しているためだ。
ならば “kome_*_drv” とインタフェースは全く同じで、おおよそ同じ動作をしてくれるルーチンを用意すれば、上位コードについてはPC上でも開発・動作可能なのではないか。
SDL_interface
そこで、このようにPCで開発できるようインタフェースは同じだけれども、中身が違うドライバルーチンを用意した。画面を表示したり、音声を出力したりするためのメディアライブラリとして libSDL を使用している。

komevader_sdl_windows
これで、Windows上で開発ができることとなる。
実際コメベーダーに関しては先にこのような仕組みを作ってあり、ゲーム部分の開発とデバッグは Windows 上で全て済ませてしまっている。

今回、下部分を SDL に頼ったが、この SDL 自体オープンソースかつ他機種向けに用意されているので、コメベーダーSDL版もコードの変更無しで様々な機種に持っていく事ができる。
komevader_sdl_macosx
MacOSX版

kv_ss_linux_01.jpg
Linux版(スクリーンショットは PS3 Linux のもの)

komevader_sdl_gp2x
OS に Linux を使っている韓国産オープンソースゲーム機 GP2X。

とまあ、こんな風に C言語基調で機種依存性を減らすように組み立てると色々できるというお話。多少無駄なコードは増えるけれどもね。

こんな開発の仕方もあるんですよというお話までに。
SDL版のソースコードは GP2X の方に置いておく。

Leave a Reply