読者です 読者をやめる 読者になる 読者になる

不確定特異点

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

軽量 RTOS の開発 (5)

OS ARM C

今日はリソース管理機能の追加をしてみました。OSEK/VDX でいうリソースとは、実質的にはミューテックスだと思われますが、あるタスクがリソースを確保したら、別のタスクはそのリソースを得ることはできず、そのタスクが解放するまでは待ち状態になる、というもの。リソースごとに待ち行列を用意して、リソース確保できなかったタスクはその待ち行列につなげ、リソースを解放するときに待ち行列に並んでいるタスクがいれば、タスクをひとつ FIFO の順で取り出し実行可能状態に移す、という方法で実装しました。

ただ、これだけだと優先度の低いタスクがリソースを取っている間は、同じリソースを共有する優先度の高いタスクは実行権を得られず処理を進められなくなる、という優先度逆転問題が起きます。そこで、リソース確保中は一時的にタスク優先度をあげる、優先度上限プロトコルの仕組みも実装してみました。思ったよりもシンプルに実装できました。

リソースを利用したサンプルプログラムとして、2 つのタスクが並行して UART 出力するものを用意しました。リソースによる排他制御をしない場合は、UART に文字列を出力している間にタスク切り替えが発生し、2 つのタスクが出力する文字列が入り乱れるのですが、排他制御のおかげで混ざることなく奇麗に文字列を出力できます。

主だった残りの機能はアラームくらいですが、ここら辺で一度リファクタリングしよう。

github.com

キーボードとマウスにこだわってみる

Mac Book のキーボードはノート PC の割に結構打ちやすくて気に入っているのですが、気合いを入れる時はやっぱりちゃんとしたキーボードを使いたいもの。そこで、Realforce 86 を Mac Book のキーボードの上に重ねてみました。ところが、打ちやすさは問題ないんだけど、トラックパッドが隠れてしまう…。仕方ないので、Magic Trackpad を購入。なんかこれ、無駄にシャレオツでハイソな気分になるなぁ。