GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
GR-KURUMIを使って、toneを使って電子オルゴールのように演奏してみたくて、
タイミングをとるためにattachCyclicHandlerを使って1ms毎に割込みして処理したいと思ったのですが、
attachCyclicHandler(0,Cycfunc,1) としてみました。Cycfunc内でカウンタを廻して、10ms毎にtone出力
することにしたのですが、実際に動かしてみると、すごく遅いようです。
感覚的には、割込が1msでなくて10msくらいでかかっているように思えるのですが、この処理では、
1ms毎の割込はできないのでしょうか?
どなたか、教えていただけないでしょうか?
割込周期時間をいくつか変更してみました。
10ms未満の値を設定しても、10msより短い周期にはならないみたいです。
100msに設定してみたら、割込はゆっくりになったので、大きい値は有効みたいです。
目視での動作確認なので、正確に測定できたわけじゃないですが、おおよそこんな感じでした。
このマイコンだと、1ms毎の処理は現実的ではないのでしょうか?SAKURAでは1ms毎に処理してうまく動いたのに・・・。
1ms毎に何かを処理するなら、割り込み処理の中から呼ばれるattachIntervalTimerHandlerが確実に動作します。割り込み状態で動作するので、時間のかかる処理は書けませんし、使える関数に制限があります。
attachCyclicHandlerは、loop1回ごと呼び出すタイミングをチェックするので、loop内の処理時間に大きく影響を受けるようです。
RLduino78_main.cppのvArduinoTaskを読むと、納得できると思います。
アドバイスありがとうございました。
attachCyclicHandlerは、タイマーで割込がかかっている訳ではないのですね。
デバッグのために液晶パネルにデータ表示している部分でdelay(10)をしており、その影響で関数の呼び出しが遅くなっていたようでした。
delay(10)をコメントアウトしたら、速いテンポで演奏できるようになりました。
Aoki さんありがとうございます。
スケッチリファレンスにも書くようにします。