ラズパイ・ピコの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」カテゴリの記事
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- DDS IC「AD9833」の出力にバッファアンプを(2025.05.27)
- DDS IC「AD9833」をArduino UNO R3で制御(2025.05.25)
- DDS IC「AD9833」の周波数レジスタ書き込みで(2025.05.23)
- Arduino UNO R3で周波数を計る(2025.05.16)
「ラズパイ・ピコ」カテゴリの記事
- Arduino UNO R3のクロック精度を1MHzパルスで確かめる(2025.04.28)
- トラ技2024年5月号に「3.3/65535」(2024.04.07)
- ラズピコだと1/65535が出現(2024.03.30)
- Help me! ラズピコ、Philhower版だとスケッチをアップロードできない(2023.04.12)
- Arduino IDEでのラズピコ開発環境 Philhower版が正解でしょう(2023.04.04)
コメント