私はTimerOne ライブラリを使用して作業しています。コードを以下に示します。
#include <TimerOne.h>
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println();
Timer1.initialize(1000000); // set a timer of length 1000000 microseconds
Timer1.attachInterrupt(timerIsr); // attach the service routine here
}
void loop() {
Serial.println(millis());
}
void timerIsr() {
Serial.print("FROM Time1: ");
Serial.println(millis());
}
問題は、いくつかのループの後 (ループ() のミリ秒が 930 を返すとき)、arduino が停止することです。
問題は、arduinoがループを実行していて、シリアルポートに書き込むときに、ISRルーチンも書き込みをしていることだと思います。どうすればこの問題を解決できますか?
私は変更を試みます:
Serial.print("FROM Time1: ");
Serial.println(millis());
に:
digitalWrite(13, !digitalRead(13));
正常に動作します。arduino のシリアル ライブラリには、割り込みを使用するときに問題があると思います。可能ですか?
コードのブロックでarduinoをブロックする方法はあります.atomicを使用しようとしましたが、うまくいきませんでした.
Arduino UNO (ATmega328) を使用しています。