AVRマイコンで動作する軽量RTOS「FunkOS/Mark3」は勉強や遊びに最適!?:リアルタイムOS列伝(31)(2/2 ページ)
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第31回は、ほぼ独力で開発された軽量RTOS「FunkOS/Mark3」を紹介する。
「FunkOS」の開発中断を経て登場した「Mark3」
さてそんなFunkOSだが、このR3を最後にしばらく開発を中断というか作業が終了する。恐らくはSlevinsky氏の作業が一段落して、これ以上FunkOSに手を入れる必要がなくなってしまったのだろう。またFunkOSはスケールの拡大が難しく(当初は8〜32ビット対応と言いつつ、実装は8/16ビットのみだった)、また多様多種のデバイスへの対応が難しかった。
ただSlevinsky氏は別にこれでRTOSへの情熱を失ったわけではなく、その後もRTOSに携わり続けた。最終的に2013年、FunkOSのコンセプトは大きく変えないまま、C++でスクラッチから起こし直した「Mark3」を開発したことをArduino Forumで公開している。
最終的にMark3 R1は2015年3月にリリースされ、以降、R3が同年6月、R4が2016年3月、R5が同年12月、R6が2017年7月、R7が2019年2月、R8が同年3月、R9が同年4月にリリースされ、最新版のR10は2019年12月である(R2は実験用のものでリリースされていない)。
ターゲットはAVRとMSP430の他、Cortex-M3/M4が加わった。AVRについては、ATMega328Pに加えATMega2560やArduino Pro Megaも対象となり、他にAtmel SAMD20やQEMUベースながらRaspberry Pi 3やTIのStellaris LM3Sの評価ボード(LM3S6965:https://www.ti.com/lit/ml/spmt127b/spmt127b.pdf)などの動作もサポートされている。R7では、ArmのAArch64対応ということでCortex-A53もターゲットに追加された。
機能面での強化も著しく、例えばThread間同期にはEvent FlagやMailbox、Dynamic Message Queuesなども追加されたし、新たにTickless software timerが実装されている。またカーネルも完全にThreadベースで統一され、スケジューラもより洗練されたものになった。
もちろんそうなるとフットプリントが多少増えることは避けがたいが、ATMega1284pをターゲットにAVR-GCC 5.4.0を利用した場合の数字で言えば、カーネルコンポーネントのメモリフットプリントは以下のようになっている(表2)。
機能 | メモリフットプリント |
---|---|
Atomic Operations | 56バイト |
Allocate-once Heap | 120バイト |
Base Class | 126バイト |
Condition Variables | 286バイト |
Coroutine task-list management | 122バイト |
Main coroutine task object | 336バイト |
Coroutine task scheduler | 318バイト |
Event Flag | 872バイト |
Mark3 Kernel Base Class | 142バイト |
Semaphore | 568バイト |
Fundamental Kernel Linked-List Classes | 560バイト |
RAII Locking Support based on Mark3 Mutex class | 62バイト |
Mailbox IPC Support | 1064バイト |
Message-based IPC | 288バイト |
Mutex | 658バイト |
Notification Blocking Object | 626バイト |
Performance-profiling timers | 366バイト |
Round-Robin Scheduling Support | 265バイト |
Reader-writer Locks | 206バイト |
Thread Scheduling | 570バイト |
Thread Implementation | 1501バイト |
Fundamental Kernel Thread-list Data Structures | 440バイト |
Thread List Data Structures | 20バイト |
Software Timer Kernel Object | 241バイト |
Software Timer Management | 412バイト |
Atmel AVR Kernel Interrupt Implemenation | 28バイト |
Atmel AVR Kernel Timer Implementation | 810バイト |
Atmel AVR Basic Threading Support | 506バイト |
合計 | 1万1569バイト |
表2 ATMega1284pをターゲットにした場合のMark3のメモリフットプリント |
全部合計しても11KBを少し上回るくらいとかなり控えめである。これはATMega32のようにフラッシュ容量が32KBの8ビットMCUでも十分動作する範囲である。ライセンスもSleepycatsからBSD3項ライセンスに切り替わった。
ちなみに現状Mark3がどうなっているかというと、既に公式サイトの「http://mark3os.com」はドメイン登録が失効しているようで、Internet Archive経由でないとアクセスできなくなっている。
ただし、R1〜R6はSourceForgeで、R6〜R10はGitHubでそれぞれ公開されている。何なら、もともとのFunkOSもSourceForgeからまだ入手可能である。
Mark3の方は、カーネルの実装方法がドキュメントで細かく説明されており、対比するソースの行番号まで示されているという親切設計だ。これを使って何か製品を作る、というのにはいろいろ足りないものがありそうだが、RTOSを勉強するための教材や、それこそRISC-Vに移植してみるなんて遊び方の題材としては手ごろなRTOSといえるかもしれない。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 連載記事「リアルタイムOS列伝」バックナンバー
- F-35戦闘機も採用する「LynxOS」はRTOSを超えたRTOSを目指す
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第30回は、軍用や航空宇宙向けを中心に一定のシェアを確保しているRTOS「LynxOS」を紹介する。 - DSP向けが源流の「TI-RTOS」はこのままフェードアウトしてしまうのか
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第29回は、TIが提供するRTOSである「TI-RTOS」を紹介する。 - μITRON/POSIX互換のRTOS「eCos」はカーネルもオプション!?
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第28回は、μITRON/POSIX互換のRTOS「eCos」を紹介する。 - Linux環境でのハードリアルタイムを実現する「RTAI」
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第27回は、Linux上でRTOS環境を提供する「RTAI」紹介する。 - Windows環境と共存可能なRTOS「RTX/RTX64」の生存戦略
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第26回は、多くの機器に採用されているWindows環境との共存が可能なRTOS「RTX/RTX64」を紹介する。