| 開発者 | ミクリアム社、 シリコンラボ |
|---|---|
| 書かれた | ANSI C |
| 作業状態 | 現在 |
| ソースモデル | 2020年現在オープンソース |
| 初回リリース | 1991年 |
| 最新リリース | OS-III / 2016 |
| リポジトリ | github.com/weston-embedded/uC-OS3 |
| マーケティングターゲット | 組み込み機器 |
| 利用可能 | 英語 |
| プラットフォーム | ARM Cortex-M3、-M4F、ARM7TDMI、Atmel AVR、eSi-RISC、その他多数 |
| カーネルタイプ | リアルタイム マイクロカーネル |
| デフォルトの ユーザーインターフェース | μC/ GUI |
| ライセンス | 2020年現在のApache 。以前は商用、フリーウェアの教育用途 |
| 公式サイト | Weston-embedded.com/micrium/overview |
| 開発者 | シリコンラボ |
|---|---|
| 書かれた | ANSI C |
| 作業状態 | 現在 |
| ソースモデル | オープンソース |
| 初回リリース | 2020 |
| 最新リリース | Gecko Platform 4.2.0.0の一部、[1] Gecko SDK 4.2.0.0の一部[2] / 2022年12月14日 |
| リポジトリ | github.com/SiliconLabs/gecko_sdk/tree/gsdk_4.2/platform/micrium_os |
| マーケティングターゲット | 組み込み機器 |
| 利用可能 | 英語 |
| プラットフォーム | Silicon Labs のシリコン |
| カーネルタイプ | リアルタイム マイクロカーネル |
| ライセンス | アパッチ |
| 公式サイト | www.silabs.com/developers/micrium-os |
| 開発者 | ウェストン エンベデッド ソリューション |
|---|---|
| 書かれた | ANSI C |
| 作業状態 | 現在 |
| ソースモデル | コマーシャル |
| 初回リリース | 2020年6月23日(uC/OS-III V3.08.00からフォーク)[3] |
| 最新リリース | Cs/OS3 3.09.02 [3] / 2023年6月23日[3] |
| マーケティングターゲット | 組み込み機器 |
| 利用可能 | 英語 |
| プラットフォーム | 50+ μC/OSとの1対1の重複があるかどうか不明 |
| カーネルタイプ | リアルタイム マイクロカーネル |
| ライセンス | コマーシャル |
| 公式サイト | Weston-embedded.com/products/cesium |
マイクロコントローラ オペレーティング システム( MicroC/OS 、 μC/OS、またはMicrium OSと表記) は、1991 年に Jean J. Labrosse によって設計されたリアルタイム オペレーティング システム(RTOS) です。主にプログラミング言語Cで記述された、マイクロプロセッサ用の優先度ベースのプリエンプティブ リアルタイムカーネルです。組み込みシステムでの使用を目的としています。
MicroC/OS では、C で複数の関数を定義でき、それぞれが独立したスレッドまたはタスクとして実行できます。各タスクは異なる優先度で実行され、中央処理装置(CPU) を所有しているかのように実行されます。優先度の低いタスクは、いつでも優先度の高いタスクに先取りされる可能性があります。優先度の高いタスクは、オペレーティングシステム (OS) サービス (遅延やイベントなど) を使用して、優先度の低いタスクを実行できるようにします。OS サービスは、タスクとメモリの管理、タスク間の通信、タイミングのために提供されます。[4]
歴史
MicroC/OSカーネルは、もともとEmbedded Systems Programming誌の3部構成の記事とLabrosse著のμC/OS The Real-Time Kernelという書籍で発表されました。 [5]彼は当初、自分が使用するために開発したポータブルOSの内部を単に説明するつもりでしたが、後に自分の会社であるMicrium, Inc.でバージョンIIとIIIとして商用製品として開発しました。
2016年にMicrium, Inc.はSilicon Laboratories [6]に買収され、その後Apacheライセンスの下でオープンソースとしてリリースされました。
Silicon Labsは、自社のシリコンで使用するためにMicrium OSというオープンソース製品を維持し続けています[ 7 ]。また、元Micrium, Inc.の従業員グループ(Labrosseを含む)は、μC/OSとオープンソースリリース直後に作成された独自のフォークであるCesium RTOSの両方に対してコンサルティングとサポートを提供しています[8] 。
μC/OS-II
μC/OS 用に記述されたソース コードに基づき、1998 年に商用製品として導入された μC/OS-II は、マイクロプロセッサおよびデジタル信号プロセッサ(DSP)用のポータブル、ROM 対応、スケーラブル、プリエンプティブ、リアルタイム、決定論的、マルチタスクカーネルです。最大 64 個のタスクを管理します。サイズは、特定の用途に必要な機能のみを含むように (5 ~ 24 KB の間で) 調整できます。
μC/OS-II の大部分は、移植性の高いANSI Cで記述されており、ターゲット マイクロプロセッサ固有のコードはアセンブリ言語で記述されています。アセンブリ言語の使用は最小限に抑えられており、他のプロセッサへの 移植が容易になっています。
組み込みシステムでの使用
μC/OS-II は組み込み用途向けに設計されています。製造元が適切なツールチェーン(C コンパイラ、アセンブラ、リンカー ロケータ[明確化が必要] ) を持っている場合、μC/OS-II を製品の一部として組み込むことができます。
μC/OS-II は、次のような多くの組み込みシステムで使用されています。
タスクの状態
μC/OS-II はマルチタスクオペレーティング システムです。各タスクは無限ループであり、次の 5 つの状態のいずれかになります (下の図も参照)。
- 睡眠状態
- 準備ができて
- ランニング
- 待機中(イベントを)
- 中断(割り込みサービスルーチン(ISR))
さらに、最大64のタスクを管理できます。ただし、これらのタスクのうち8つをμC/OS-II用に予約して、アプリケーションに最大56のタスクを残すことをお勧めします。[9]
カーネル
カーネルとは、オペレーティングシステムのハウスキーピングタスクのほとんどを実行するプログラムに付けられた名前です。ブートローダはカーネルに制御を渡し、カーネルはさまざまなデバイスを既知の状態に初期化し、コンピュータを一般的な操作に備えます。[10]カーネルはタスクの管理(つまり、CPUの時間管理)とタスク間の通信を担当します。[11]カーネルが提供する基本的なサービスはコンテキストスイッチングです。
スケジューラはカーネルの一部で、次にどのタスクを実行するかを決定する役割を担っています。[12]ほとんどのリアルタイムカーネルは優先度に基づいています。優先度ベースのカーネルでは、CPU の制御は常に実行準備が整った最も優先度の高いタスクに与えられます。優先度ベースのカーネルには、非プリエンプティブとプリエンプティブの 2 種類があります。非プリエンプティブカーネルでは、各タスクが CPU の制御を明示的に放棄するために何かを行う必要があります。[12]プリエンプティブカーネルは、システムの応答性がより重要である場合に使用されます。したがって、μC/OS-II とほとんどの商用リアルタイムカーネルはプリエンプティブです。[13]実行準備が整った最も優先度の高いタスクには常に CPU の制御が与えられます。
タスクの割り当て
実行率が最も高いタスクには、レートモノトニックスケジューリングを使用して最高の優先度が与えられます。[14]このスケジューリングアルゴリズムは、静的優先度スケジューリングクラスを備えたリアルタイムオペレーティングシステム(RTOS)で使用されます。[15]
タスクの管理
コンピューティングでは、タスクは実行単位です。一部のオペレーティング システムでは、タスクはプロセスと同義であり、他のオペレーティング システムではスレッドと同義です。バッチ処理コンピュータ システムでは、タスクはジョブ内の実行単位です。μC/OS-II のシステム ユーザーは、次の機能を使用してタスクを制御できます。
- タスク機能
- タスク作成
- タスクスタックとスタックチェック
- タスクの削除
- タスクの優先度を変更する
- タスクを一時停止して再開する
- タスクに関する情報を取得する[16]
メモリの管理
断片化を回避するために、μC/OS-IIでは、連続したメモリ領域で構成されたパーティションからアプリケーションが固定サイズのメモリブロックを取得できるようにしています。すべてのメモリブロックは同じサイズで、パーティションには整数個のブロックが含まれています。これらのメモリブロックの割り当てと解放は一定時間で行われ、決定論的なシステムです。[17]
時間の管理
μC/OS-II では、時間遅延とタイムアウトを追跡するために、周期的な時間ソースを提供する必要があります。ティックは、1 秒あたり 10 回から 1000 回 (ヘルツ)の間で発生する必要があります。ティック レートが速いほど、 μC/OS-II がシステムに課すオーバーヘッドが大きくなります。クロック ティックの周波数は、アプリケーションの必要なティック解像度によって異なります。ティック ソースは、専用のハードウェア タイマーを使用するか、交流(AC) 電源ライン (50 または 60 Hz) 信号から割り込みを生成することによって取得できます。この周期的な時間ソースは、クロック ティックと呼ばれます。[18]
クロックティックが決定された後、タスクは次のようになります。
- タスクの遅延
- 遅延したタスクを再開する
タスク間のコミュニケーション
μC/OS-II のタスク間またはプロセス間通信は、セマフォ、メッセージ メールボックス、メッセージ キュー、タスク、および割り込みサービス ルーチン(ISR) を介して行われます。タスクまたは ISR がイベント制御ブロック (ECB) と呼ばれるカーネル オブジェクトを介してタスクに信号を送ると、それらは相互に通信できます。信号はイベントと見なされます。
μC/OS-III
μC/OS-III は、2009 年に導入され、μC/OS-II RTOS に機能を追加した Micro-Controller Operating Systems Version 3 の略語です。
μC/OS-III は、μC/OS-II のすべての機能を提供します。最大の違いは、サポートされるタスクの数です。μC/OS-II では、255 の優先度レベルごとに 1 つのタスクのみが許可され、最大 255 のタスクが許可されます。μC/OS-III では、アプリケーション タスク、優先度レベル、レベルごとのタスクの数は無制限で、プロセッサのメモリ アクセスによってのみ制限されます。[19] [20]
μC/OS-II および μC/OS-III は現在、Silicon Labs の子会社である Micrium, Inc. によって保守されており、製品ごとまたは製品ラインごとにライセンスを取得できます。
組み込みシステムでの使用
用途はμC/OS-IIと同様です
タスクの状態
μC/OS-III はマルチタスクオペレーティングシステムです。各タスクは無限ループであり、5 つの状態 (休止、準備完了、実行中、中断、保留) のいずれかになります。μC/OS-III は無制限の数のタスク優先度をサポートしますが、μC/OS-III を 32 から 256 のタスク優先度に設定すれば、ほとんどの組み込みシステムに適しています。[21]
ラウンドロビンスケジュール
2 つ以上のタスクが同じ優先度を持つ場合、カーネルは 1 つのタスクを一定時間実行することを許可し (これをクォンタムと呼びます) 、その後別のタスクを選択します。このプロセスは、ラウンドロビン スケジューリングまたはタイム スライシングと呼ばれます。カーネルは、次の場合に次のタスクに制御を渡します。
- 現在のタスクには、そのタイムスライス中に実行する作業がない、または
- 現在のタスクがタイムスライスの終了前に完了する、または
- タイムスライスが終了します。
カーネル
μC/OS-III のカーネル機能は、μC/OS-II と同じです。
タスクの管理
タスク管理も μC/OS-II と同じように機能します。ただし、μC/OS-III はマルチタスクをサポートしており、アプリケーションは任意の数のタスクを持つことができます。タスクの最大数は、プロセッサで使用できるコンピュータ メモリ (コードとデータ スペースの両方) の量によってのみ制限されます。
タスクは、スケジュールされた完了まで実行して、完了するとタスク自体を削除するか、またはより一般的には、イベントが発生するのを待機してそれらのイベントを処理する無限ループとして実装できます。
メモリの管理
メモリ管理はμC/OS-IIと同じ方法で実行されます。
時間の管理
μC/OS-III は、μC/OS-II と同じ時間管理機能を提供します。また、アプリケーションにサービスも提供し、タスクがユーザー定義の時間遅延の間、実行を一時停止できるようにします。遅延は、クロック ティック、または時間、分、秒、ミリ秒のいずれかの数値で指定されます。
タスク間のコミュニケーション
場合によっては、タスクまたは ISR が別のタスクに情報を伝達する必要があります。これは、2 つのタスクが同じ特定のデータまたはハードウェア リソースに同時にアクセスするのは安全ではないためです。これは、タスク間通信と呼ばれる情報転送によって解決できます。タスク間の情報は、グローバル データ経由またはメッセージの送信という 2 つの方法で伝達できます。
グローバル変数を使用する場合、各タスクまたは ISR は、変数への排他的アクセスを確実に行う必要があります。ISR が関係する場合、共通変数への排他的アクセスを確実に行う唯一の方法は、割り込みを無効にすることです。2 つのタスクがデータを共有する場合、割り込みを無効にするか、スケジューラをロックするか、セマフォを使用するか、または可能であれば相互排他セマフォを使用することで、各タスクは変数への排他的アクセスを取得できます。メッセージは、メッセージ キューと呼ばれる中間オブジェクトに送信することも、タスクに直接送信することもできます。これは、μC/OS-III では、各タスクが独自の組み込みメッセージ キューを持っているためです。複数のタスクがメッセージを待機する場合は、外部メッセージ キューを使用します。受信したデータを 1 つのタスクだけが処理する場合は、タスクに直接メッセージを送信します。タスクがメッセージの到着を待機している間、CPU 時間は使用されません。
ポート
ポートには、CPU、OS、ボード固有 (BSP) コードという 3 つの側面が関係します。μC/OS-II と μC/OS-III には、市場で最も一般的なプロセッサとボード用のポートがあり、航空、医療システム、原子力施設などの安全性が重要なOS_CPU.H組み込みシステムでの使用に適しています。μC/OS-III ポートでは、3 つのカーネル固有ファイル ( 、、OS_CPU_A.ASMおよびOS_CPU_C.C) の内容を書き込むか変更します。最後に、使用している評価ボードまたはターゲット ボードのボード サポート パッケージ (BSP) を作成または変更します。μC/OS-III ポートは、μC/OS-II ポートに似ています。ここに記載されているポートよりもはるかに多くのポートがあり、ポートは継続的に開発されています。μC/OS-II と μC/OS-III はどちらも、すべての接続でセキュリティを確保するwolfSSLなどの一般的なSSL/TLSライブラリによってサポートされています。
ライセンスの変更
2020 年に Silicon Labs に買収された後、Micrium は2020 年 2 月にオープンソース モデルのライセンスに変更しました。これには、uC/OS III、以前のすべてのバージョン、すべてのコンポーネント (USB、ファイル システム、GUI、TCP/IP など) が含まれます。
ドキュメントとサポート
サポートは、一般的なサポート フォーラム、およびいくつかの包括的な書籍 (一部の書籍は特定のマイクロコントローラ アーキテクチャと開発プラットフォームに合わせてカスタマイズされています) を通じて、無料の PDF として、または低価格のハードカバーで購入してご利用いただけます。有料サポートは、Weston Embedded Solutions からご利用いただけます。
参考文献
- ^ 「Gecko Platform 4.2.0.0 GA」(PDF) 2022年12月14日. 2023年1月4日閲覧。
- ^ 「gecko_sdk Releases on github.com」。GitHub 。2023年1月4日閲覧。
- ^ abc 「Cs/OS3 リリースノート」。Weston Embedded Solutions。
- ^ 「NiosII GCC with MicroC/OS」。コーネル大学電気・コンピュータ工学部。2006年6月。 2017年4月25日閲覧。
- ^ ラブロス、ジャン J. (2002 年 6 月 15 日)。μC/OS リアルタイム カーネル(第 2 版)。 CRCプレス。ISBN 978-1578201037。
- ^ 「Micrium とは?」 Weston Embedded Solutions . 2023 年 1 月 4 日閲覧。
- ^ 「Micrium ソフトウェアとドキュメント」 。2023年 1 月 4 日閲覧。
- ^ 「なぜ Cesium RTOS なのか?」 Weston Embedded Solutions . 2023 年 1 月 4 日閲覧。
- ^ Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第 2 版) p. 77。
- ^ Wikiversity:オペレーティングシステム/カーネルモデル#モノリシックカーネル
- ^ Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第 2 版)。p. 39。
- ^ ab Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第 2 版)。p. 40。
- ^ Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第 2 版)。p. 42。
- ^ Liu, Chung Lang; Layland, James W. (1973). 「ハードリアルタイム環境でのマルチプログラミングのスケジューリングアルゴリズム」Journal of the ACM . 20 (1): 46–61. CiteSeerX 10.1.1.36.8216 . doi :10.1145/321738.321743. S2CID 59896693.
- ^ Bovet, Daniel. 「Linuxカーネルを理解する」。2014年9月21日時点のオリジナルよりアーカイブ。
- ^ Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第2版)。pp. 45–49。
- ^ Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第2版)。pp. 273–285。
- ^ Labrosse, Jean J. MicroC/OS-II: リアルタイムカーネル(第2版)。pp. 145–152。
- ^ “μC/OS-II とμC/OS-III の機能比較”.ミクロム。
- ^ 「μC/OS-III の概要」。Micrium。
- ^ https://media.digikey.com/PDF/Data%20Sheets/Micrium%20PDFs/UC_OS-III_RTOS.pdf#:~:text=Micrium%E2%80%99s%20%CE%BCC%2FOS-III%20supports % 20ARM7%2F9%2C%20Cortex-MX%2C%20Nios-II%2C%20PowerPC%2C%20Coldfire%2C は、%20%20Micrium%20Web サイトから%20利用可能%20ダウンロード%20。
出典
- Fusion Embedded の μC/OS-II プロトコル サポート
- Micrium-uCOS-III ユーザーズマニュアル 第 1 版
- uC/OS-III: Renesas RX62N 向けリアルタイムカーネル
外部リンク
- 公式サイト
- GitHub上の SiliconLabs
- よく使用される uC/OS-II 関数とデータ構造の概要
- NiosII GCC と MicroC/OS
- μC/OS-II リファレンスマニュアル
- μC/OS-II アプリケーションを実行する方法
