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-ROSEのmicros()関数が不審な挙動を見せています。
まだ詳しくは調査できてないのですが、周期的に時刻が少しだけ逆戻りしているかのようなふるまいです。(オーバーフローとかの話ではないです。)
たとえば以下のスケッチはGR-CITRUSでは100msecごとに8番ピンがHIGH⇔LOWしますが、GR-ROSEだと約50usec期間/100msec期間を繰り返します。
void setup() { pinMode(8, OUTPUT); digitalWrite(8, LOW); int flip = 0; while(1){ uint32_t t1 = micros(); while(1){ uint32_t t2= micros(); if((t2-t1) > 100000){ flip = 1- flip; digitalWrite(8, flip); break; } } } } void loop() { }
どうも、microsの戻り値の10進数下3ケタが071→000という巻き戻りが発生するようです。
下記のスケッチを実行すると、
319071 319000
のような巻き戻りがぞくぞく出てきます。GR-CITRUSではなにも出力されません。(オーバーフローまで行けば出るでしょうけど)
void setup() { Serial.begin(115200); while(1){ uint32_t t1 = micros(); while(1){ uint32_t t2= micros(); if(t1 != t2){ if(t2 < t1){ Serial.print(t1); Serial.print("\t"); Serial.println(t2); } break; } } } void loop() { }