計測的な用途で,タイマー割り込みを使ってみました。uiflowでプロトタイプし,thonnyで仕上げてM5に転送して使います。手軽でいいです。
main(抜粋).py
@timerSch.event('timer')
def ttimer():
global s
s=s+1
s=0
timerSch.run('timer', 1000, 0x00) # 変数sには経過時間(秒)が入るはず...
M5をWiFiに接続できない環境でしたので,これを選択したのですが,数分とか数時間使うとどうもずれているようでした。
WiFiに接続できる環境で,NTPと比較してみました。
経過時間 19611 秒,Timerでは442回カウント少なかったようです。2.3%ほど指定した1秒より長いようですね。
タイマーの時間を2.3%減らしてみました。
main(抜粋).py
a = 1000 * (1 - 442 / 19611)
timerSch.run('timer1', a, 0x00)
いい感じです。ただ,割り込みじゃないときの負荷によって,変わるのかもしれません。
さらに調べていくと,経過時間を知るだけなら utime
モジュールが使えそうです。utimeとNTPで比較してみました。
main(抜粋).py
import utime
u0=utime.ticks_ms()/1000 # 最初の時を保存
# 中略
u=utime.ticks_ms()/1000-u0 # 経過時間
はい。こちらのほうがいいですね。BASICはRTCを持ちませんので,WiFiを使えない場合はutimeを使うようにしてみます。
(補足)Core2も,タイマー割り込みは2.6%ほど遅くなっていました。「そういうもの」なのかもです。