ソフトウエア規模が大きく、複数のエンジニアや拠点で分割開発する例として、図1-1の様に開発会社(とりまとめ)が2拠点の開発協力会社に機能単位でプログラム開発を分担する場合を考えてみます。
開発会社はソフトウエア全体の制御を行う部分(ハードウエアの初期化、MMUを利用したメモリ空間全体構成の設定やRTOSカーネルなど)を担当します。ここではこの部分を「本体アプリ」と呼ぶことにします。
開発会社は、協力会社1に、機器ハードウエアの自己診断プログラムを開発委託することにします(アプリ1)。また協力会社2には、同社の持つノウハウを組み込んだデータ処理プログラム(アプリ2)を開発委託することにします。アプリ1、アプリ2ともに比較的本体アプリと切り離して開発が進められる例です。
(本体および各アプリ間で共有するグローバル変数や関数名を指定する方法は第二回目で説明します)
図1-1 開発協力会社がアプリケーション単位でプログラムを分担して開発
このような体制で開発する場合、本体アプリはROM等に書き込まれた実行モジュールだけがあればよく、ソースコードを協力会社に提供しなくても問題ありません(図1-2)。SOLID環境で開発されたプログラムであれば、本体アプリのソースコード無しでも、開発を分担する協力会社1、協力会社2は各々の担当アプリケーションを単体で開発し、ビルド・ロードを行い、メインモジュールと一緒にデバッグできます。
図1-2. ソースコード無しで開発を分担
またこれとは逆に、協力会社がソースコードを開示することなく、開発会社(とりまとめ)に実行モジュールのみを提供するだけで、本体アプリを単体で更新してビルド・ロードし、開発会社側でプログラム全体を動作させることが出来ます(図1-3)。
実機デバッグにおいては、ソースコードが存在する部分はソースコードデバッグが、ソースコードが無い部分はアセンブラレベルでのデバッグが出来ます。もちろんソースコードが無い部分であっても、ブレークポイントを設定してプログラムの動作確認ができます。
図1-3. 協力会社がソースコードを開示しなくても各社がビルド・ロード・デバッグ可能
SOLIDの開発対象はRTOSシステムのようなリアルタイム制御システムなので、全てのアプリは単一の論理空間に配置されます。物理アドレス上も固定配置されるため、一度ロードしたプログラムはユーザーの意図しないタイミングでアンロードしたり、アドレスが移動する事はありません。これもLinuxのマルチスレッド動作などとSOLIDが大きく異なる点であり、特長でもあります。