エンジニアコラム

単純に"Windows"だからといってWindows CEを採用することは間違いです   

エンジニア・コラム

伊藤 優 さん [ アキタ電子システムズ 所属・マイクロソフト認定MVP ]

第4回:デバイスドライバへの要求

Windows CEを採用した製品開発をする場合、そのハードウェアは製品ごとに異なる場合がほとんどです。その場合、一般のPCとは異なり、デバイスドライバは製品ごとに準備することになります。CPUや周辺LSIを供給しているLSIベンダーからは、BSP(Board Support Package)やデバイスドライバも合わせて提供されている場合も多くありますが、これらはほとんどがサンプルです。


そこで製品に合わせてブート、OAL、デバイスドライバを含むBSPを作り直す必要が出てくるのです。ここでよくBSPがあるから後はアプリケーションを開発するだけという誤解があります。しかし製品が要求するデバイスや機能、性能はそれぞれ異なります。したがってBSPは設計し直しと考えて間違いはありません。するとこの時にドライバなどをどのように設計すべきかを最初に考える事になります。


例えばシリアルドライバ。調歩同期式で最大115.2kbps、スタート/ストップビット、パリティビット・・・という仕様でも設計はできます。でもそれは汎用のシリアルドライバでしかないのです。例えば次のような通信を行うデバイスではどのように設計をしたら良いのでしょうか?(シリアル通信モジュールのFIFOサイズは 64byte、FIFO割り込はハーフとします)


-1 通信速度38.4kbps、パケット長1024byte、パケット発生頻度2回/s
-2 通信速度768kbps、パケット長16byte、パケット発生頻度1回/10s


一見、通信速度の低い1項の方がドライバとしては楽に見えます。しかし高速通信の2項では1パケットがFIFOにすべて入ってしまい、かつパケット発生の頻度が多くない事からタイムクリティカルな事象は発生しにくいです。それに対して1項では38.4kbpsと比較的遅い速度ながらも、通信の頻度が非常に多くなっています。さらにFIFO割り込みが発生してから残り32byteの通信期間、すなわち9.2ms経過するとFIFOが溢れてしまいます。


この1項のドライバはFIFO割り込み発生から許される遅延時間は9.2msだという事がわかるのです。この条件をどう満足させるのか、これが設計のポイントです。この時にもう一つ考えなくてはいけないのが、システムではシリアルドライバだけではなくアプリケーションも、他のドライバも動いているという事です。これらが仲良く共存することで、初めてシステムが成立します。


このようにデバイスドライバに対してはAPI だけではなく、トリガー発生後の許容レイテンシ、CPU負荷、競合時の優先順位など複合的な視点で仕様を決定することになります。アプリケーションからの要求、製品性能としての要求、システム構成からの制限やスレッドのプライオリティ調整など、全体を見渡した設計が重要なのです。