2014/10/04

[nrf51]スケジューラは結局なんなんだ? - (1)

またnRF51822のスケジューラで悩んでいる。
前回は、こちら。

[ble][nrf51]スケジューラーって、何よ?
http://hiro99ma.blogspot.com/2014/07/blenrf51_17.html

以前は省電力のためにwfiで待ち状態にするために使ってるんだろう、みたいなことを書いたけど、よく考えるとあれはスケジューラじゃなくてsd_app_evt_wait()だ。
ドキュメントに、スケジューラの有無でのシーケンスが書いてあるのだが、BLE Stackとアプリの間にスケジューラが挟まっているだけだ。
うーむ。


何度かシーケンスを見比べていて気付いたが、スケジューラが挟まっていない場合はBLE Stackなどの各ユニットが直接アプリとやりとりをするのだが、スケジュールが入っている場合は各ユニットではなくスケジューラがアプリとやりとりをしている。
つまり、各ユニットの占有時間が減るということだ。
この利点は、割込コンテキストで動作する時間を減らせるので、割込の取りこぼしが少なくなるとか、そういうことじゃなかろうか。
スケジューラを使えないようにできるのは、アプリのサイズを小さくしたかったり、アプリの応答性を優先させたいとかの判断があったりとか、そういうことなんかね。


もしそういう存在理由なら、スケジューラを使うからといってタイマユニットを使わないといけない、ということはないはずだ。
いや、ドキュメントのどこにもそんなことは書いてないのだけど、テンプレートでタイマの初期化だけしてあったし、スケジュールっていうと時間が関係しそうだから必須かもしれない、と思っていたのだ。

では、はずしてビルドしてみればわかるだろう。
make・・・リンクエラーだ。
そうか、ボタンのチャタリング防止(なんか単語があったが忘れた…)とか、BLEの時間制御もこれを使っているんだ。
じゃあ、BLE使うんだったらapp_timer.cが必要になるのか。
リンクするのは良いとして、初期化はアプリでやってやらんといかんのかな?

それに、今スケジューラの初期化を見て気付いたのだが、スケジューライベントの最大値をsizeof(app_timer_event_t)で与えているのだ。
理由はわからんが、やはりスケジューラにはタイマが必要ってことかい??

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。