組み込みシステム アーキテクチャを定義する場合、HAL の定義に関しては 2 つのオプションがあります。
- ドライバー レイヤーの上に HAL を定義します (つまり、移植先のプラットフォームごとにドライバーを書き直す必要があります)。
- ドライバー層の下に HAL を定義します (つまり、移植先のプラットフォームごとに HAL を書き直す必要があります)。
どちらが優れているのか、その理由は?
組み込みシステム アーキテクチャを定義する場合、HAL の定義に関しては 2 つのオプションがあります。
どちらが優れているのか、その理由は?
簡単な答え: はい。
HAL (またはドライバーの下に Stable driver ABI があると、特にドライバー ライターにとっては便利です)。ドライバーの上に HAL があると、アプリケーション プログラマーにとって便利です。
両方を行うことができます。Unix デバイス ドライバーを見てください。かなり移植性があります。[エンディアン性はまだ噛み付いています]
どちらが優れているかは、組み込みアーキテクチャの製品開発ロードマップによって異なります。
いくつかの例を試してみましょう。
それが商用製品であり、あなたの会社がプラットフォーム間での移植の必要性を認識していないとしましょう。この場合、あなたは気にしません。
あなたの会社がテレビセットなどでそれを使用しており、プラットフォームが変更されることが予想されるが、デバイスは同じままである場合 (テレビはテレビですが、最も安価なマイクロは時間の経過とともに変化します)。 d hal-below-driver を使用して、ドライバーへの投資を維持します。
会社がスマートフォンなどを製造している場合、プロセッサが変更され、デバイスも変更され、解像度が変更されると、追加のセンサーが追加されます...したがって、この場合、hal-above-driverを使用し、ソフトウェア負荷の大部分は一般的です。
組み込み用に 2 つの HAL を配置すると、建築宇宙飛行士になるリスクがあります。2 つの HAL (実行時間と設計時間) のコストが、プラットフォーム間での移植で節約できる労力を超える場合、時間とお金の無駄になります。
HAL にどれだけの労力が費やされるかは、同様にトレードオフです。小さな組み込みシステムでは、あまりにも多くの抽象化を行う余裕はありません。
繰り返しになりますが、このトレードオフは、アプリケーションにとって適切な選択である小さなプラットフォームに依存します。最終的には、市場投入までの時間と機能とデバイスあたりのコストの相対的な重要性に依存します. 大量市場では安くする必要があるとよく言われます。科学的証拠はほとんど提供されていません。最も収益性の高い組み込みデバイス メーカーの 1 つは Apple であり、小さなプラットフォームを使用していません。(ちなみに、彼らはNASDAQを大きく歪めたため、NASDAQにはもういません)
HAL がなく、プラットフォームを変更する必要がある場合、たとえばプロセッサの寿命が尽きると、大幅なハード リライトが発生します。
YAGNI ルール (必要になることはありません) をトレードオフの研究なしに適用しようとすると、後で会社に多大な損害を与える可能性があります。
テクノロジーが予期せぬ方向に進んで盲目的になれば、トレードオフの研究は間違ったものになり、会社は苦境に立たされます。