組み込みOS適材適所 《Windows Embedded CE編》(2) ―― μITRONシステムからWindows Embedded CEシステムへの移行手順
2.マイグレーション実践
ここからは,実際にITRONプラットホーム上に構築されたシステムを,CEプラットホームに移行してみます.まずITRONプラットホーム上に,FA機器や計測機器などで多用されるRS232-Cによるシリアル通信処理で,コマンドやデータを送受信する簡単なシステムを構築し,その後可能な限りソース・コードを流用してCEにシステム移行します.
1) ITRONプラットホーム・システムの解析(実践)
●使用するITRONプラットホーム
ITRONプラットホームとして,筆者が所属している安川情報システムが提供しているD2P-1000を使用しますz(図3).D2P-1000は,外部インターフェースとしてRS-232CやDIO,LANを搭載しており,RS-232C⇔LANコンバータとして利用することができます.自由にアプリケーションを変更することができ,工作機械などの遠隔監視・遠隔制御などにも利用されています.
なお,製品詳細は「Intesse D2CoreSeries:Intesse D2P-1000」をご覧ください.
図3 D2P-1000の外観図
●ITRONシステムの構成
構築したシリアル通信システムの構成を図4に示します.このシステムでは,制御対象とシリアル経由でコマンドやデータを送受信し,取得したデータをデータ・バッファに保存します.
なお,あらかじめD2P-1000にはシリアル通信ドライバが付属しており,アプリケーション・タスクからは独自APIを通じてシリアル通信できるように実装されています.
図4 ITRONプラットホーム・システムの例
●処理シーケンス
以下,ITRONシステムのシーケンス図を簡単に示します.周期ハンドラが200[msec]毎に発行するイベントに合わせて,シリアル通信アプリケーション・タスクが起動します.起動後,シリアル通信でデータを送受信後,データを保存して休止状態に入ります.この処理を電源断されるまで繰り返します.
図5 シーケンス図
●使用するCEプラットホーム
移行先のCEプラットホームのシステム例として,Spark Kitとして提供されている,ICOPテクノロジー社製「eBOX-4300」を題材とします.eBOX-4300は,オフィス環境などを想定して製作されており,さまざまな外部インターフェースを持っています.
- シリアル(RS232-C)
- Ethernet
- USB端子
- Speaker端子
- Compact Flash用スロット
なお,eBOX-4300 Spark Kitの詳細はICOPテクノロジー社のHPをご覧ください.
図6 eBOX-4300の外観図
2) 移行方法の検討(実践)
移行方法のイメージを図7に示します.本題材のITRONプラットホームでは,ハードウェア・アクセス部としてシリアル通信ドライバがありますが,独自APIで区切られています.また,eBOX-4300のBSPとしてシリアルドライバが提供されていますので,I/Fの差異を埋める処理を実装するだけとなります(表2).
また,200[msec]周期ハンドラとシリアル通信アプリケーション・タスクは,そのままソース・コードを流用します.
図7 題材システムの移行方法
表2 シリアル通信用独自APIの移行方法例
●ITRONシステム・コールの差異吸収処理
前回の記事で解説しましたが,ITRONとCEでは実行コンテキストや同期処理の概念はほぼ同等です.ただし,システム・コール仕様は異なるため,その差異を埋める必要があります.例えばITRONのタスク生成処理であるcre_tsk関数が使用されていれば,CEへ移行する際にはスレッド生成処理に置き換えます.
本題材では,できるだけ既存ソース・コードの変更量を抑えるため,ITRONシステム・コールと同じ名前の関数を定義し,その関数内で機能を実現するためのCEシステム・コール(Win32API)を実装するよう設計します(図7のITRONシステム・コール差異吸収処理).
以下にcre_tskの実装コード例を示します.
#define MAX_TSKID (8) // タスクID 上限 static HANDLE TSKID_HANDLE_SLOT[ MAX_TSKID ]; // タスク生成処理 ER_ID cre_tsk(ID tskid,const T_CTSK* pk_ctsk) { ER_ID errid = E_OK; HANDLE hHandle = INVALID_HANDLE_VALUE; int i = 0; if( INVALID_HANDLE_VALUE != TSKID_HANDLE_SLOT[tskid-1] ) { // IDが空いてない return E_NOID; } // スレッド生成 hHandle = CreateThread( NULL, pk_ctsk->stksz, (LPTHREAD_START_ROUTINE)(pk_ctsk->task), NULL, CREATE_SUSPENDED, NULL); if(NULL == hHandle) { // スレッド生成失敗 return E_OBJ; } // スレッド優先度を変更 CeSetThreadPriority(hHandle, pk_ctsk->itskpri - 1 + 248); // ハンドルを保存 TSKID_HANDLE_SLOT[tskid-1] = hHandle; return errid; } |
3) CEプラットホーム・システムの構築(実践)
ここからは,Visual Studio2005(以後,VS2005と表記)を用いて,
- OSデザイン
- アプリケーション作成
という手順で作業します.
●OSデザイン
eBOX-4300用のBSPがインストールされた状態で,Visual Studio 2005を起動し,[ファイル]メニューからプロジェクトの新規作成を選択します.「新しいプロジェクト」ダイアログが開きますので,各項目を以下のように設定し,OKをクリックします.
プロジェクトの種類:Platform Builder for CE 6.0
テンプレート:OS Design
プロジェクト名:(任意)
OSデザインのウィザードが起動しますので,ウィザードに沿って設定を行います.本題材では,ボード用のBSPを選択したほか,デザイン・テンプレートとして[PDAデバイス]の[エンタープライズ Webパッド]を選択してOSデザインを行っています.
●アプリケーションの作成(サブプロジェクトの作成)
ITRONシステムのタスクを移行して動作させるための,アプリケーションを作成します.VS2005の[ファイル]メニュー ⇒ 追加 ⇒ New Subprojectを選択してください.「Windwos Embedded CE Subproject Wizard」ダイアログが開きますので,各項目を以下のように設定し,OKをクリックしてください.
サブプロジェクト名:(任意)
テンプレート:WCE Console ApplicationのA typical "Hello World" application
ソリューション・エクスプローラ上のSubprojectツリーに,作成したプロジェクトが追加されています.