ベアメタル開発者がオペレーティングシステムに移行した理由
「ベアメタル時代」を振り返って
>組み込みソフトウェアについて初めて知ったのは2008年頃で、私は2年生で、51チップでのプログラミングについて学び始めました。私はコンピュータサイエンスを専攻していたので、ほとんどのプログラムはPCで実行されていました。ベアメタルボードでプログラムが実行されているのを見るのはまったく別の経験でした。最初のサイクリングランププログラムが正常に実行されたときの興奮を今でも覚えています。しかし、私が書いたベアメタルプログラムが多ければ多いほど、私はより多くの問題に直面しました。それらを次のように要約します。
並行性
ベアメタルプログラムの場合、必然的に巨大な「while(1)」ループが発生します。これには、プロジェクト全体のほぼすべてのトランザクションロジックが含まれます。各トランザクションは1つ以上の遅延関数を呼び出し、CPUが遅延関数を実行しているときにそれらはシリアルに実行され、残りのトランザクションは待機する必要があります。このように、CPU時間の多くは空のループで浪費され、同時実行性がかなり低くなります。
モジュール性
ソフトウェアプロジェクトの観点から、開発プロセスでは常に高凝集度と低結合度の原則が強調されます。ただし、ベアメタルソフトウェアのモジュールは通常、相互に大きく依存しているため、結合度の低いソフトウェアを設計するのは不便であり、ベアメタルボードで大規模なプロジェクトを開発することは困難です。例:
- 前述のように、ほとんどの関数は巨大な「while(1)」ループに集められ、モジュールに分割するのは困難です。
- 別の例として、開発者はウォッチドッグタイマーが関係する場合に遅延関数を使用するように注意する必要があります。遅延時間が長すぎる場合、メイン関数にウォッチドッグをリセットする機会がないため、実行中にウォッチドッグがトリガーされます。したがって、ベアメタル開発の場合、遅延関数を呼び出す場合でも考慮すべきことが多すぎます。プロジェクトが複雑になるほど、注意を払う必要があります。
エコシステム
多くの高度なソフトウェアコンポーネントは、下位レベルのオペレーティングシステムの実装に依存する必要があります。例:
- ベアメタルボードも考慮して、さまざまなプラットフォームに移植することを計画していた「FreeModbus」に基づいたオープンソースプロジェクトを開発しました。ただし、さまざまなオペレーティングシステムに適応させるという利便性と比較すると、一部の機能は複雑すぎてすべてのベアメタルボードに実装できません。一方、多くの実装は、共通性が欠如しているため、さまざまなハードウェアプラットフォームでゼロから設計する必要があります。これは、退屈で時間のかかる作業です。今のところ、Modbusスタックの実装はまだベアメタルボードで実行できません。
- Realteck、TI、MediaTekなどの大企業が提供する多くのWiFiソフトウェア開発キット(SDK)は、オペレーティングシステムでのみ実行できます。ユーザーが変更できるファームウェアのソースコードは公開されていないため、ベアメタル環境内で使用することはできません。
リアルタイム
一部のアプリケーション分野では、リアルタイム機能が必要です。この状況では、ソフトウェアのいくつかの重要なステップを特定の時間にトリガーする必要があります。業界の管理では、機械装置は事前に決定された順序とタイミングでアクションを完了する必要があります。リアルタイム機能が保証されない場合、誤動作を引き起こし、労働者の生命を危険にさらす可能性があります。ベアメタルプラットフォームでは、すべての機能が1つの大きな「while(1)」ループに詰まっている場合、リアルタイム機能を維持することは不可能です。
再利用性
再利用性は、モジュール性に直接依存します。特にコードを書くとき、誰も同じ仕事を何度もやりたくないと思います。ただし、チップが異なるさまざまなハードウェアプラットフォームでは、同じ機能をさまざまなハードウェアに適合させる必要があり、その実装は低レベルのハードウェアに大きく依存します。ホイールを再構築することは避けられません。
オペレーティングシステムの利点
私が最初にオペレーティングシステムを使用したのは2010年頃でした。 STM32MCUのシリーズは人気が出始めていました。強力な機能により、多くの人がオペレーティングシステムを実行していました。それから私は、すぐに使えるコンポーネントがたくさんあるRT-Threadオペレーティングシステムを使用していました。他のオペレーティングシステムと比較して、私はより快適に感じ、10年間開発を続けています。
私の理解に基づいて、オペレーティングシステムの利点について説明したいと思います。
モジュール性
オペレーティングシステムを使用すると、ソフトウェア全体をいくつかのタスク(スレッドと呼ばれる)に分割でき、各スレッドには独自の独立した実行スペースがあります。これらは互いに独立しているため、モジュール性が向上します。
並行性
スレッドが遅延関数を呼び出すと、CPUを必要としている他のスレッドに自動的に譲ります。これにより、CPU全体の使用率が向上し、最終的には同時実行性が向上します。
リアルタイム
RTOSは、リアルタイム機能を使用して設計されています。各スレッドには、指定された優先度が割り当てられます。重要度の高いスレッドは優先度が高く設定され、重要度の低いスレッドは優先度が低く設定されます。このようにして、ソフトウェア全体のリアルタイムパフォーマンスが保証されます。
開発効率
オペレーティングシステムは、抽象インターフェースの統合レイヤーを提供します。これにより、再利用可能なコンポーネントの蓄積が容易になり、開発効率が向上します。
オペレーティングシステムは、ソフトウェアオタクのグループの知恵の産物です。セマフォ、イベント通知、メールボックス、リングバッファ、一方向チェーンリスト/双方向リストなどの多くの一般的なソフトウェア機能は、これらの機能をすぐに使用できるようにカプセル化および抽象化されています。
LinuxやRT-Threadなどのオペレーティングシステムは、デバイスドライバーフレームワークと呼ばれる、断片化されたハードウェア用の標準的なハードウェアインターフェイスのセットを実装します。したがって、ソフトウェアエンジニアは開発に集中するだけでよく、基盤となるハードウェアについて心配したり、ホイールを再構築したりする必要はありません。
ソフトウェアエコシステム
生態系の豊かさは、量的な変化のプロセスを質的な変化にもたらします。
オペレーティングシステムのモジュール性と再利用性の向上により、オペレーティングシステムベースの組み込みに適した再利用可能なコンポーネントをカプセル化できます。これは、プロジェクトで使用できるだけでなく、必要としているより多くの組み込み開発者と共有でき、ソフトウェア。
私はオープンソースのオタクであり、GitHubでいくつかの組み込みソフトウェアをオープンソース化しています。オープンソースソフトウェアを作成する前は、自分のプロジェクトについて他の人と話すことはめったにありませんでした。なぜなら、人々は異なるチップやハードウェアプラットフォームを使用しているため、私のコードは彼らのハードウェアではほとんど実行できないと考えたからです。オペレーティングシステムを使用すると、ソフトウェアの再利用性が大幅に向上し、多くの専門家が同じプロジェクトについて互いにコミュニケーションをとることができます。彼らはさまざまな国から来ています。これにより、ますます多くの人々がプロジェクトについて共有し、話し合うことができます。
埋め込み
- 産業用インターネットセキュリティフレームワーク:それが何であり、なぜあなたが気にかけるべきか
- 記数法
- 現在の信号システム
- 業界でのコンタクトトレーシング:超高精度のWi-Fiベースのローカルポジショニングシステムが必要な理由
- なぜ私たちはまだ停電のダウンタイムに耐えているのですか?
- 物理的セキュリティの安心のためにサイバーセキュリティが不可欠な理由
- 空気圧コンベヤーシステムが優れている3つの理由
- なぜそれ。システムはグローバルサプライチェーンの進化の鍵
- 製薬サプライチェーンをデジタル化する必要がある理由:考慮すべき6つの質問
- 圧縮空気システムの安全な操作手順
- トレーサビリティがIIoT対応の製造システムにとって不可欠な基盤である理由