はじめに
QEMUでTOPPERS/ASPカーネルを動かす - 本編 - Qiita
https://qiita.com/imagou/items/e532c00b3c0a0a800cda
にて、LinuxでRTOSをエミュレートすることには成功しました。万歳。
しかし、Windows環境しかない人に
Ubuntuをインストールしてね!そしたらRTOSが疑似れるよ!
というのは酷だなあ、ということで、Windowsシミュレータを作りました!
(厳密には「作る」というほど大袈裟ではないですが・・・)
本編
1. 準備
1-1. 環境
以下
-
Windows環境
Win10 Pro 64-bitで動作確認
-
Visual C++ 2019
Microsoft Visual Studio Community 2019 Version 16.2.3 で動作確認
-
FreeRTOS v10.2.1
特別ダウンロードしなくてもOKです
1-2. FreeRTOSとして動かす
(あえてURLは載せませんが)
FreeRTOSのサイトからダウンロードしたデモプログラムが、まんま動きます。
しかし、
FreeRTOSのAPIは超絶わかりにくい、やっぱりuITRONだろ
と思いました。
いや実際のところ、FreeRTOSはシンプルで非常によくできていると思うのですが、、、やはりuITRONへの馴染みは深いのであります。
2. 成果 - uITRONぽいもの
ということでいきなり成果物です(雑)。
ずばり、単純にuITRONのI/Fを間に挟んだものを用意しました。
imagou/uITRON_based_on_FreeRTOS
https://github.com/imagou/uITRON_based_on_FreeRTOS
ライセンスはGNU GPL v2です。FreeRTOSと同じですね。
3. 解説
3-1. ビルド方法
uITRON_based_on_FreeRTOS\Demo\WIN32-MSVC-uITRON\WIN32.sln
をVC++で開いて、ビルドするだけです。
3-2. 使い方
起動時のウインドウで、"help"と入力してください(雑)。
[TimerTask]: DELAY 3000ms
[TimerTask]: DELAY 3000ms
help
uTITRON (based on FreeRTOS) Demo Program
1 - 15の数値 : 数値メッセージの送受信
stop : 受信タスクの一時停止
start : 受信タスクの再開
lock : 受信タスクのロック
unlock : 受信タスクのアンロック
cyclic : 周期ハンドラの開始/停止(初期状態は停止)
alarm : アラームハンドラの開始/停止(初期状態は停止)
exit : デモの終了
help : このメッセージを表示
3-3. 解説
以下のタスク・ハンドラ(と機能)で構成されています。
- コマンドタスク(コマンドを受けてイベント発行)
- 送信タスク(イベントを受けてメッセージ送信)
- 受信タスク(メッセージ受信)
- タイマタスク(3000msec周期でログを出すだけ)
- 周期ハンドラ(1000msec周期でイベント発行)
- アラームハンドラ(5000msecで満了)
uITRONの以下の機能を有します。
- タスク関連(完璧ではない)
- イベントフラグ
- メールボックス
- ミューテックス
- 周期ハンドラ
- アラームハンドラ
ということで、まだまだ開発途上です。
(機会があれば、充実度を上げていきたいとは思っています・・・)
3-4. 注意
1msecのタイマティックがうまくないようで、かなり長いです。
時間があれば追ってみます。
2020/4/27追記:
補正機能追加により、(ミリオーダーの誤差はありますが)期待通り動作するようになりました!
おわりに
言わば
単なるuITRONラッパー
なので、繰り返しですが大したことはしていません。笑
しかしながら、
誰しも簡単に(uITRONベースの)RTOSが動かせる
は、十分に満たしているものと思います!
続きの記事
Windowsシミュレータで学ぶuITRON (1) - タスク操作 - Qiita
https://qiita.com/imagou/items/de102b81d0049b819532
Windowsシミュレータで学ぶuITRON (2) - イベントフラグ - Qiita
https://qiita.com/imagou/items/80ec6e4970de31540524
Windowsシミュレータで学ぶuITRON (3) - メールボックス - Qiita
https://qiita.com/imagou/items/f407f6ec32a693584842
Windowsシミュレータで学ぶuITRON (4) - ミューテックス - Qiita
https://qiita.com/imagou/items/32ceff3e963f7fc070b2
Windowsシミュレータで学ぶuITRON (5) - 周期ハンドラ - Qiita
https://qiita.com/imagou/items/f6c50d8e01a5f8d86141
Windowsシミュレータで学ぶuITRON (6) - アラームハンドラ - Qiita
https://qiita.com/imagou/items/edd79187091773c6a43f
参考
Micro-ITRON4.0 Specification (in Japanese)
http://www.ertl.jp/ITRON/SPEC/mitron4-j.html
(以下は内部仕様)
FreeRTOS API categories
https://www.freertos.org/a00106.html