HOME > ソフテックだより > 第40号(2007年4月18日発行) 現場の声編「はじめてのマイコンソフト開発 」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第40号(2007年4月18日発行)
現場の声編

「はじめてのマイコンソフト開発」

1.はじめに

私は、2006年4月にソフテックに入社し、今年度で入社2年目になる社員です。
今回は、私が入社して8か月ほど経った昨年末に関わったマイコンソフト開発の話を紹介したいと思います。
今までに、Windowsでのパソコンソフト開発は行ったことがありましたが、マイコンソフトの開発を行うのはほぼ初めてのことでした。

2.仕事の概要

今回お話しするのは、ある電子機器の制御を行うドライバソフトの開発プロジェクトです。
このドライバソフトは、データ通信制御・LCD制御・ボタンの制御などさまざまな機能を持っていますが、私が担当したのは、印刷機能の制御を行う部分の製作です。

3.設計とコーディング

実際にコーディングを始める前に、まずは、プログラム全体の処理の流れをある程度固めなければなりません。どのような処理を作るか決まらないうちにコーディングを始めても、修正の繰り返しになり効率が悪いためです。印刷機能の制御を行うプログラムと言うことで、モーターやプリンタヘッドの制御タイミングを気にしながら処理の流れを考えなければなりません。
マイコンソフト(組み込みシステム)開発を行うとき、WindowsなどのPCアプリケーションソフトの開発と違うもののひとつに、割り込み処理と言うものがあります。割り込みとは、プログラムを実行中にCPUや周辺機器(今回の場合は、プリンタ)からの信号が入ると、プログラムのどの部分からでも割り込み信号に対応した関数を呼び出せる仕組みを言います。この仕組みによって、周辺機器の動作に反応して、特定の処理を行わせることができます。
また、PCアプリケーションソフトの開発では、ハードウェアについて意識しなければならないことはあまり多くありません。しかし、マイコンソフトの開発を行う場合、動作対象のCPUや使用する周辺機器の仕様も把握して作業を行わなければなりません。
今回使用したプリンタは、PCにつないで使うような大きなものではなく、5cm程度の小型のものです。CPUからのポート出力によって、モーターやプリンタヘッドを制御して動作するようになっています。

設計を行った後は、上司と先輩社員にレビューを行って頂きました。レビューとは、自分の行った設計やコーディングの内容を他の人に説明して、問題がないかチェックしてもらう事です。
1回目のレビューでは、事前の準備をしっかり行っていなかったため、プログラムの処理がどうなっているかうまく説明することが出来ませんでした。また、プログラムの流れで問題がある点の指摘も大量に頂く結果になりました。結局、1回目のレビューでは、設計のやり直しを言い渡され、後日再度レビューを行うことになりました。
この時、自分が作っているプログラムの内容について、理解しているつもりでも理解できていない点が沢山あるのだと言うことがわかりました。

2回目のレビューでは、質問を受けながらも何とか全体の処理の内容を説明することができ、コーディングを進めることになりました。コーディングがある程度終了した時には、先輩社員にコーディングレビューも行って頂き、問題点を指摘して頂きました。
今回の開発では、コメントはかなり念入りにつけていたため、その点は良いと言って頂きましたが、レジスタの設定の仕方や割り込み処理の書き方についてかなり指摘を頂き、マイコンプログラムの難しさを再確認しました。

4.デバッグと調整

コーディングが終了した後は、デバッグ作業に入りました。マイコンソフト開発でのデバッグ作業は、パソコンソフトの開発と違い、色々な専用の機器が必要になります。今回のデバッグ作業で使用したのは、お客様からお借りした開発用の基板と、ICE(In-Circuit Emulator、インサーキットエミュレータ)、ロジアナ(ロジックアナライザ)です。
ICEとは、CPUの動作をエミュレートする機器です。本物のCPUと同じ機能を持っていて、さらにデバッガと接続することでブレークやレジスタ・メモリの監視などを行うことができます。
ロジアナとは、信号のON/OFF状態を監視することができる機器です。これを使うことで、ポート出力や割り込みが仕様どおりに行われているか確認することができます。
これらの便利な機器を使用してデバッグを進めるうちに、割り込み処理やポート出力が思ったとおりに行われない不適合がいくつか見つかりましたが、上司と先輩社員のアドバイスで一つずつ解決していきました。

以上のような作業の末、ようやくプリンタが動作し、印刷を行うことに成功しました。しかし、喜んだのも束の間、ここからが本番でした。モーターやプリンタヘッドがどのようなタイミングでどれだけの時間動作するかは、お客様から細かく指示が入っており、実際にそのタイミング通りに動作しているかをチェックしなければなりません。そして、チェックの結果、モーターを回転させる処理が、規定時間内に終了しない場合がある事がわかりました。原因は、メモリコピーに時間がかかっているためでした。
上司のアドバイスで、DMA(Direct Memory Access、ダイレクトメモリアクセス)と言う、ソフトでなくCPUの機能を用いてメモリコピーを行う方法に切り替えることで、この問題は解決できました。
その他にも、デバッグ中にはいくつも問題が起こりました。私はこれまで、Windowsでのプログラミングは行ったことがありましたが、マイコンソフトのプログラミングは初体験に近い状態でした。そのため、周辺機器の仕様をしっかり把握していないために問題が起きたり、レジスタを用いたCPUの設定に抜けがあるなど、初歩的なミスをいくつもしてしまいました。
中には、デバッグに使用している基板の端子に異常が起きたり、ICEのケーブルに接触不良が起きるなど、ソフト的な問題ではなくハード的な問題もありました。その度に、上司や先輩社員のサポートを頂いて、最終的にはすべての不適合を取り除くことが出来ました。

5.開発を終えた感想

開発に入った当初、上司から『今回のソフトは複雑な処理があり難しいので、コーディングの前に設計を念入りに行うように』と言われていました。
本来であれば、開発の流れは以下のように進むべきでした。

しかし、今回の開発で私がとった行動は以下のようなものです。
仕様理解・設計・コーディングの段階が混ざってしまっています。

お客様から頂いた資料や、過去のバージョンのソフトについて、理解が不十分なまま行き当たりばったりに作業を進めてしまったように思います。また、ソフト面だけでなく、CPUの動作やプリンタの動作についても考慮不足のまま進めてしまいました。そのため、テストを行う段階になっても、何度も仕様を確認しなおしたり、プログラムの変更を行う羽目になりました。知識や経験不足での見落としはともかく、『この部分は後々問題になりそうだなあ』と思っていたのに確認を怠った部分があるのはとても反省しなければならない点だと思います。
今回の開発は、経験の浅い私にとっては難しいもので、数多くの失敗をしてしまいましたが、今回の経験を今後の開発に生かしていきたいと思います。

6.まとめ

今回の開発では、ここまで書いてきたように、作業の進め方が悪く後戻りがとても多かったり、資料の内容を理解できていなかったり等、多くの反省点があります。しかし、入社後初めて大きな開発プロジェクトに関わって色々な失敗をしたことで、今後の開発でどのようなことをしてはいけないかが少しわかったように思います。
また、マイコンソフト開発では、パソコンソフト開発と違って、現実のモノを制御するのが楽しかった点です。自分の書いたプログラムで、実際にプリンタが動作したときの嬉しさはそれまでの苦労を吹き飛ばすものでした。
今回のドライバソフト開発では、設計レビューの際に『この設計だとこのような不適合が起こる』と言う具体的な指摘を頂いたり、テストの時に起こっている不適合の内容を話すだけで原因をある程度特定して頂いたりするなど、先輩社員と上司に多くのサポートを頂きました。そのおかげで、時間的には予定をかなりオーバーしてしまったものの品質的には満足のいくものを完成させることができました。数年後には、自分がそのようなサポートを後輩に対して行えるよう、努力していきたいと思います。

(M.K.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ