ラズパイ・ピコのmillisとmicros、なぜか遅い!?
ラズパイ・ピコをArduino IDEで動かそうとしたけど のコメントで、
「なんとなくloop時間が長いぞ」っと記しましたが、
millisとmicrosの処理時間をテストしてみました。
void setup() {
pinMode(2, OUTPUT); // GP2
pinMode(3, OUTPUT); // GP3
}
uint32_t t;
void loop() {
if(millis() != t){ // 1ms変化?
digitalWrite(2, HIGH); // GP2
t = millis();
digitalWrite(2, LOW);
}
digitalWrite(3, HIGH); // GP3 H/L
digitalWrite(3, LOW); // loopでパルス
}
まずmillis。
処理に10us以上かかっています。
microsはちょっと速くなりました。
こんな具合に1ms経過をチェック。
if((micros() - t) >= 1000){ // 1ms変化
:
どんな処理をしているのか探してみましたが、探し切れていません。
<common.h>
unsigned long millis(void);
unsigned long micros(void);
void delay(unsigned long);
void delayMicroseconds(unsigned int us);
<wiring.cpp>
unsigned long millis(){
return duration_cast<milliseconds>(lowPowerTimer.elapsed_time()).count();
}
unsigned long micros() {
return timer.elapsed_time().count();
}
この中の、
lowPowerTimer.elapsed_time()).count();
timer.elapsed_time().count();
この処理がどうなっているのか不明っす。
※追記 Arduino-UNOと比較
それじゃっと、16MHzクロックのArduino-UNO(ATmega328p)と
比較してみました。
こんなスケッチ。
// ポート出力 H/L (digitalWriteだと遅いので)
#define PD2_H (PORTD |= (1 << PD2))
#define PD2_L (PORTD &= ~(1 << PD2))
#define PD3_H (PORTD |= (1 << PD3))
#define PD3_L (PORTD &= ~(1 << PD3))
void setup() {
pinMode(2, OUTPUT); // D2
pinMode(3, OUTPUT); // D3
}
uint32_t t;
void loop() {
if(millis() != t){ // 1ms変化
PD2_H; // PD2 H/L
t = millis(); // millis処理の時間
PD2_L;
}
PD3_H; // PD3 H/L
PD3_L;
}
確認用のパルス出力はdigitalWriteを使わず、ポートの直叩きで
スピードアップします。
結果の波形。
millisの処理が1.3usほど。
約2usでloopを回っています。
loopで出しているパルス(PD3)。
それが、いったん止まります。
その原因がタイマー0のオーバーフロー割り込み。
millisはタイマー0のオーバーフロー割り込みでカウントアップ
していますんで、その直後のloopで1ms経過を検知している
様子が見えています。
ラズパイ・ピコの速度、はてさて・・・
※関連
・割り込みで処理させるwordデータの扱い
Arduino-UNOでのmillisの中味を解説しています。
| 固定リンク
「Arduino」カテゴリの記事
- Arduino UNO R3で±19.9V表示電圧計(2023.10.14)
- 「御詠歌プレーヤー」の製作 (MP3-TF-16Pモジュールの使用例)(2023.08.10)
- Arduino UNO R3のソケット・・思えば違和感がぁ(2023.07.07)
- 初めて買ったArduino UNO・・・今は(2023.05.25)
- 液晶表示コントローラ HD44780で迎撃(2023.05.16)
「ラズパイ・ピコ」カテゴリの記事
- Help me! ラズピコ、Philhower版だとスケッチをアップロードできない(2023.04.12)
- Arduino IDEでのラズピコ開発環境 Philhower版が正解でしょう(2023.04.04)
- ラズピコのピン:自由になりそうだけど定義で固定されている(2023.04.03)
- ラズピコで2chシリアル入出力のテスト(2023.03.30)
- Arduino IDEでのラズピコ開発環境(2023.03.29)
コメント