自分でRTXをビルドせずとも、nRF51 SDKのサンプルにRTXで動くものが入っていた。
nRF51422向けだが、まあ大丈夫だろう。
ビルドしてみる前に、ソースの差分を見てみる。
ble_app_hrsと、ble_app_hrs_rtxのmain.cだ。
だいたいこんな感じだ。
- タイマは、OSのしくみを使う
- SoftDeviceからのBLEイベント通知は、メッセージボックスに詰めて投げるだけ。
処理はble_stack_thread()というスレッド(uITRONでいうところのタスク)で行う。 - sd_app_evt_wait()は、osDelay(1000)に置き換えられている
sd_app_evt_wait()は、SoftDeviceなしだとWFEみたいだが、SoftDeviceありだとSVCALLしている。
何か秘密があるんじゃないかと思ったんだけど・・・。
なんか、ちょっと納得がいってない。
RTXのosDelay()をたどると、__svcDelay()を呼んでいた。
svcDelay()という関数はあるのだが・・・。
こんな記載があり、マクロマクロして、SVCに変換されるようだ。
SVC_1_1(svcDelay,・・・・)
この辺が、nRF51 SDKがRTXをサポートしているという意味なのか。
でも、それだったら1秒じゃなくて、もっと長くすればいいのにという気もするが・・・何か違うのか・・・。
SVCはSoftDeviceと共有と書いてある。
だから、上記リンク先の表でも、RTXよりもS110の方が動作までに多くクロック数がかかるようになっているのだろう。
しかし、Application SVC interruptはS110の方が速くなっていて、何か腑に落ちない。
私がSVCをまだ理解できてないせいかもしれないので、本を読んでみよう。
「nRF51822」と「RTOS」で検索すると、こちらが見つかったので拝見させていただいております。
返信削除まだ始めたばかりなのとネットでの情報が少ないので、とても参考になります。
ちなみに当方の目標は自作のRTOSもどきを載せて使うことです。
おお、自作ですか!
削除私は「全部OSに任せる」か「全部自分でやる」のどちらかしかできないので、今のところ自作OSには向いていないようです(今のところ、というのに野望を残している)。
こちらの情報が役立ち、どうにか自作OS上でBLEを動かせるようになりました。RAMの空き容量が3Kバイトしかないのがアレですが。
返信削除あと、アイドル時はWFEしているのですが、オリジナルはSVC呼び出ししてwaitしているようなので、消費電力がちょっと心配です。
おめでとうございます!
削除3KBもあれば、なかなかよい感じでは。
オリジナルは、確かにSVCしてからWFEだかWFIしてましたね(うろ覚えですが)。SoftDeviceの中で何か止めたりしてるんですかね。。。