AVRマイコンで動作する軽量RTOS「FunkOS/Mark3」は勉強や遊びに最適!?リアルタイムOS列伝(31)(2/2 ページ)

» 2023年02月07日 07時00分 公開
[大原雄介MONOist]
前のページへ 1|2       

「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からまだ入手可能である。

GitHubで公開されている「Mark3」 GitHubで公開されている「Mark3」[クリックでWebサイトへ移動]

 Mark3の方は、カーネルの実装方法がドキュメントで細かく説明されており、対比するソースの行番号まで示されているという親切設計だ。これを使って何か製品を作る、というのにはいろいろ足りないものがありそうだが、RTOSを勉強するための教材や、それこそRISC-Vに移植してみるなんて遊び方の題材としては手ごろなRTOSといえるかもしれない。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.