モダンOSのお砂場(6) FreeRTOS、Windows上で練習

このところ別シリーズでM5Stackを扱っていることが多く、気になっていましたFreeRTOS。M5StackをArduinoIDE環境で使っていたら表立ってはFreeRTOSは現れてきませんが、「アプリ」プログラムを裏で支えてくれているのがFreeRTOS。Arduinoのような「一皮被せた」環境でなく、ESP32の開発環境を整備すれば直FreeRTOSが見えるようにできる筈ですが、今、あまり時間がなくメンドイ。もっとお手軽にFreeRTOS触ってみる方法はないものか?

※「モダンOSのお砂場」投稿順Indexはこちら

そこでまずは、ご本家 FreeRTOSのホームページへ行ってみました。FreeRTOSはAmazon傘下に入っているので、Amazon風?のホームページかと思えば、装飾もほとんどなく、シンプルなホームページです。トップから以下の順に階層を降りていきました。

  1. Getting Started
  2. Getting started with the FreeRTOS kernel

すると左側のナビゲーション的なリンクのリストの中に

Supported Devices

というFreeRTOSがサポートしているデバイスのリストと思しき項目があり、さらにその下層にSupported Demosという項目がありました。多分、

Demoがある=環境設定済のビルド環境がある

ということであるので、「お手軽」指向としては見逃せません。結構ね、自分で環境作るのはトラブったりすることも多いので、ありものに乗るのが確実じゃないかと思います。さて、そのリストをば見れば、28項目ならんでいるのです。まず目についたのが、先頭の方にある ARMv8-Mという項目。これはARMのソフトウエアエミュレータ上でFreeRTOSを動かすための環境のようです。これであれば実機も要らず、PCの上でいろいろ「遊んでみれる」。しかし、開発環境を見て諦めました。ARM純正Keilでした。確か評価用の無償バージョンではエミュレータは使えない筈。なにか無償環境で実機無しに動作するようなものがないかいなと思ってみていくと、ありました、リストの最後の方に

x86 / Windows simulator

内容をみると、Eclipse+MingW 環境で動作させるプロジェクトと、Visual Studioで動作させるプロジェクトの両方がありました。simulatorと言っているのは、RTOSを動かすために必要なハードウエアの機能(割り込みなど)の代わりにWindowsのAPIを使って、WindowsAPIの上でFreeRTOSを動かしているからです。RTOSの実行コード自体はx86命令にコンパイルされている筈、命令セット自体をシミュレーションしている分けでは無いと思います。1点注意を引用させていただきましょう。

although the FreeRTOS Windows port will not exhibit true real time behaviour.

当然ですが、本来ハードで処理されるべき仕事をWindowsにお願いしているので、動作しているコードはRTOSだけれど、実時間性を期待してはいけない、ということでしょう。

今回は、Visual Studioバージョンを使用させていただきました。使用方法を読んでいて、これだったら実際には数分で動くところまで行くのでないの、と思ったのがその理由。どこかに、Visual Studioでも2010バージョンと書いてありました。手元の環境は、Visual Studio 2015 なのでバージョン違いですが、まず、新しい版で古いものが動かないということはあまり無いと思うので、そのままディレクションにそって

  1. FreeRTOSのダウンロード
  2. 指定のslnファイル(プロジェクトファイル)をVisual Studioで開く
  3. プロジェクトの中の#define文を確認
  4. ビルド

とやってみました。ダウンロードしたFreeRTOSは、v10.2.1_191129というバージョンでした。ダウンロードサイズは20Mバイトくらいで直ぐにダウンロードできましたが、ソースコード多数なので圧縮率高いのでしょう、unzipすると300Mを越えました。demoのフォルダを見ると、ホームページでは、28項目しかなかったデモが、178個のホルダに分かれて格納されていました。サポートしているボードx開発環境の数、いろいろな組み合わせが列挙されている感じです。ここにリストされているものであれば、実機に適用するときも楽そうです。お目当てのプロジェクトは

WIN32-MSVC

にありました。手元のVisual Studioで開くとこんな感じ。

肝心のFreeRTOS本体はというと、FreeRTOS Sourceの中にちゃんと鎮座しています。これを真面目に読んでいけばよく分かるようになるのかな、と思いつつ、今回は、手っ取り早くデモ本体を眺めます。デモの本体は、Demo App Source内のBlinky_Demoフォルダに格納されている

main_blinky.c

というソースに全て記述されています。送信と受信の2つのタスクがあり、その間にキューが設定されていて、送信側は周期的にメッセージを送る。受信側はメッセージが到来したらメッセージ来たぞ、と画面に知らせるものです。ただ、これだけではあんまりおもしろくないので、何かキーを押すとソフトウエアタイマのカウントが始まって、2秒後にそのハンドラから別のメッセージが飛ぶようになっています。すると、受信タスクは、「いつものじゃない、タイマから来ました」、と報告するという塩梅。確かにRTOSとして最低限の雰囲気でてるんじゃないでしょうか。main.c内のある定義を1にしろと書かれていたのですが、実際にダウンロードしたファイルのmain.cを確認してみると該当の#define文は既に1になっていたので、修正の必要はありませんでした。ビルド、問題なく成功しました。デバッグ・ビルドに設定されているので、debugフォルダ内にビルド結果の

RTOSDemo.exe

が出来ています。デバッガの制御下でなくcmd.exeから起動すると左のように、ずらずらとメッセージを受信したという表示がつづきます。

動いているのは分かるですが、正直つまりません。キーボードに触れてみます。

触れてから数秒待つと、タイマからのメッセージが届きました。できることはこれだけ。でも、Windows上のVisual Studio環境で、FreeRTOSのソースをビルドして、FreeRTOSのいろいろな機能を実際に試してみることができるというものです。

ホントお手軽です。お試しあれ。

モダンOSのお砂場(5) Micro:bitとDroidScriptその3 へ戻る

モダンOSのお砂場(7) FreeRTOS kernelとAmazon FreeRTOS