不確定特異点

広く深く、ところどころ超深く

軽量 RTOS の開発 (4)

イベントフラグの実装をしてみました。OSEK/VDX のように、各タスクはイベントオブジェクトを持ち、wait_event() で待ち状態に入ります。このとき、起床条件にあたるビットパタンを指定します。続いて、別のタスクが set_event() によりイベントをセットします。ここで、起床条件のうちのどれか一つのビットで AND がとれた場合にタスクを待ち状態から実行可能状態に遷移させます。いわゆる OR 待ちというやつですね。

起床したタスクは get_event でセットされたイベントのビットパタンを見ることで、実際にどのタスクから通知が来たかを知ることができます。この仕様だと AND 待ちができないため、複数のイベントを待ち合わせる必要がある場合は、必要な回数だけ wait_event を繰り返すことになります。

次はリソース確保(セマフォのようなもの)の実装に挑戦です。

OS の開発環境について

Mac OS X 上の仮想マシン(Virtual Box)上の Linux で、GCC を使ってターゲット CPU である Cortex-Mコア向けにクロスコンパイルしてます。最終的には実機で動作させたいのですが、人に貸し出し中でそもそも実機が手元になく、実機へのプログラムの転送や実行時にリセットボタンを押すのが面倒、という理由で QEMU というエミュレータ上で開発してます。QEMU の -nographic というオプションを使って CUI で起動すると、編集、コンパイル、実行がすべて端末内で完結できるので非常に効率がいいです。