HOME > ソフテックだより > 第75号(2008年10月1日発行) 技術レポート「ラッパー関数を使用した組み込みソフトウェアの移植」

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

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


ソフテックだより 第75号(2008年10月1日発行)
技術レポート

「ラッパー関数を使用した組み込みソフトウェアの移植」

1. はじめに

ソフテックでは今まで組み込みソフトウェア開発の依頼を多数いただき、マイコンを使用したシステム開発を数多く行っています。
中には初期の開発から何年も経ているシステムもあり、新しいCPUを選定して、新しい基板を開発するという依頼をいただくことがあります。このような場合、初期の開発のソフトウェアを利用してシステムを開発することが求められます。
今回は、私が実際にソフトウェアの移植で工夫した内容について紹介いたします。

2. ソフトウェアの構造

マイコンには、タイマやシリアル通信やROM/RAMといった記憶装置など、様々な周辺機能が実装されています。
CPUが変わると、周辺機能の構成も変わるため、ソフトを移植するためには、周辺機能の構成に合わせて修正する必要があります。
ソフテックで開発している組み込みソフトウェアでは、移植性を考慮してアプリケーションとドライバを分離して開発を行っています。

ソフトウェアの構造
図1. ソフトウェアの構造

3. ソフトウェアの移植

アプリケーションとドライバを分けることで、ハードウェアが変わっても、理論的にはドライバ部分を修正するだけで、ソフトウェアの移植が可能になります。

つまり、以下のようにソフトウェアの移植を行います。

ここで分かりやすく、流用元のシステムをA、新しく開発するシステムをBとします。
システムをB用に、新規にドライバBを作成、あるいはドライバAから修正したドライバBを作成します。
アプリケーションAとドライバBを組み合わせることにより、新たなシステムBを開発することができるのです。

ソフトウェアの移植 〜ドライバを新規に作成する〜
図2. ソフトウェアの移植 〜ドライバを新規に作成する〜

また、新しく使用するCPUを既に別のシステムで使っている場合もあります。
この場合、別のシステムのドライバを移植することが可能です。
別のシステムをシステムCとすると、アプリケーションAとシステムCを組み合わせてシステムBを開発することになります。

ソフトウェアの移植 〜既存のドライバを流用する〜
図3. ソフトウェアの移植 〜既存のドライバを流用する〜

他のシステムのドライバを利用した時の利点としては、以下のものがあります。

<他のシステムのドライバを利用した時の利点>

  • 既に実績のあるソフトウェアであるため、信頼性が高い。
  • ドライバを新規に作成する必要がない。

ただし、他のシステムのドライバをそのまま流用できるとは限りません。
それぞれのシステムで、個々にアプリケーションやドライバを作成していると、以下のようなケースがあります。

(1) 流用元で使用していたドライバの関数名や引数などが異なる。
(2) 似たような機能のドライバであっても、処理内容が微妙に違う。

4. ラッパー関数の組み込み

上記(1)、(2)の問題を解決するため、ラッパー(Wrapper)関数というものを使用することがあります。
ラッパー関数を使用することにより、アプリケーションAとドライバCを変えることなく、システムBを開発することができます。

ラップ(Wrap)とは、包み込むという意味です。
例えば、ある関数を使いたいと思ったときに、そのままではその関数を使えなく、使用するのが面倒な場合があります。そのような時に、簡単に呼び出せるような関数を作ってあげれば楽になります。このように関数を呼び出すときの手続きを省略してくれるような関数のことをラッパー関数といいます。

ここでは、アプリケーションAからドライバCを呼び出せるようなラッパー関数Bを作成します。
つまり、ラッパー関数Bは、ドライバAと同じ関数名・引数を持ち、ドライバCを呼び出すために必要な情報を作成して、ドライバCを呼び出します。また、場合によってはドライバCの処理を、ラッパー関数Bが引き取り、ラッパー関数B内で処理の内容を修正することも可能です。

ソフトウェアの移植 〜ラッパー関数を組み込んで既存のドライバを流用する〜
図4. ソフトウェアの移植 〜ラッパー関数を組み込んで既存のドライバを流用する〜

例えば、システムAで、以下のC言語による処理があったとします。

システムAの処理
図5. システムAの処理

しかし、システムCではドライバの内容が少し違っていることがあります。

システムCのドライバ
図6. システムCのドライバ

そこで、ラッパーBを作成することによって、アプリケーションAもドライバCも変更することなく、アプリケーションAとドライバCを使用してシステムBを開発することができます。

新規にラッパー関数を作成する
図7. 新規にラッパー関数を作成する

5. まとめ

ラッパー関数を使用したソフトウェアの移植について紹介させていただきましたが、流用元のソフトウェアが、アプリケーションとドライバに分かれているからできることです。
しかし、10年以上前のソフトウェアは、メモリの容量やCPUの性能などといったハード的な制約があったため、アプリケーションとドライバが分かれていないことが多くあります。このようなソフトウェアを移植する時は、非常に大変な作業となります。
最近ではこのようなハード的な制約を受けることはほとんどなくなっていると思います。そのため、新規開発をする場合は、将来を見越して移植性の高いソフトウェアを開発することが大切になっています。

(T.M.)


関連ページへのリンク

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

ページTOPへ