gpt4 book ai didi

TimerOne 和串行库

转载 作者:行者123 更新时间:2023-12-04 04:45:59 26 4
gpt4 key购买 nike

我正在使用 TimerOne library ,代码如下所示:

#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)

最佳答案

第一个问题是您的 ISR(中断服务程序)不得 执行任何 IO。
而是写一些东西,比如:

int timedone;

setup() {
// etc.
timedone = 0;
}

loop() {
if (timedone == 1)
{
Serial.print("FROM Time1: ");
Serial.println(millis());
}
}

void timerISR() {timedone = 1;}

而不是你所拥有的:
void timerIsr() {
Serial.print("FROM Time1: ");
Serial.println(millis());
}

希望这可以帮助。

关于TimerOne 和串行库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com