FreeRTOSなるもの

最近若い人の間でFreeRTOSが流行っていると聞いたので、少し調べてみた。FreeRTOSはAWSが買収したことでも注目を集めたが(もう3年も前か)、実装が簡単で扱いやすいと言うことで商用でも広く使われているようだ。ちなみにMicrosoftはThreadXを買収してAzure RTOSとしているし、GoogleやFacebookはLinux FoundationのZephyrを支援している(GoogleのFuchsiaはどうなった?)。クラウド事業者のIoT戦略の一つとしてRTOSの強化が計られているようだ。

さてFreeRTOSだが、POSIXでのシミュレーション環境もあるので、macOS上で動かしてみた。このドキュメントにしたがえば、特に迷うこともないだろう。

私のマシン環境はM1 macなので、まずはx86_64環境に移行。今回は使わないような気がするが、ネットワーク関係はlibpcapを使うので、brewでインストールしておく。

% arch -x86_64 zsh
% brew install libpcap

ソースコードはgithubからcloneする。

% git clone https://github.com/FreeRTOS/FreeRTOS.git
% git submodule update --init --recursive
% cd FreeRTOS/FreeRTOS/Demo/Posix_GCC
% make

makeするとbuildディレクトリ以下にposix_demoという実行ファイルが生成されるので、実行する。

% ./posix_demo 

Trace started.
The trace will be dumped to disk if a call to configASSERT() fails.

The trace will be dumped to disk if Enter is hit.
Starting echo blinky demo
Message received from task
Message received from task
Message received from task
Message received from task
Message received from software timer
Message received from task
Message received from task
Message received from task

デフォルトでは0.2秒ごとに”Message received from task”、2秒ごとに”Message received from software timer”というメッセージが表示される。いわゆるLチカに相当するアプリだが、このアプリケーションでタスク、キュー、ソフトウェアタイマーの概念を理解できる。
また、main.cのmainSELECTED_APPLICATIONを変更すれば実行されるアプリケーションが変わる。

余力があればカーネルのソースコード(FreeRTOS/Source以下)を見てみよう。ざっくり1万行強とコンパクト。また、FreeRTOS/Source/Portable/[compiler]/[architecture]ディレクトリに機種依存のアセンブリコードがある。GCC/RISC-Vとかね。MIPSのニーモニックを久々に見た。

いまどきハンガリアン記法っぽい名前規則はないだろうという感じがするが、若者は気にならないのだろうか。

この記事が気に入ったらサポートをしてみませんか?