我有这个代码,我尝试在超时时重启Timer5。但我不能,你可以帮助我吗?
#include <TimerFive.h>
#include <TimerOne.h>
#include <openGLCD.h>
#define OLDWAY
unsigned long timer5_started=0;
void setup() {
Serial.begin(9600);
Timer1.stop();
Timer1.detachInterrupt();
Timer1.initialize(500000);
Timer1.attachInterrupt(Timer1Handle);
Timer1.start();
Timer5.stop();
Timer5.detachInterrupt(); //detach interrupt
Timer5.initialize(100000);
Timer5.attachInterrupt(Timer5Handle);
Timer5.start();
///---
}
void loop() {
while(1){
Serial.println("loop...");
delay(500);
}
}
void Timer5Handle(){
timer5_started=millis();
Serial.println("timer 5...");
while(1){
int a=0;
}
}
void Timer1Handle(){
if(millis()-timer5_started>100000){
Serial.println("restart...");
Timer5.restart();
}
}
当Timer5超时时,Interupt停止,我该如何重启? 当Timer5超时时,Interupt停止,我该如何重启?
答案 0 :(得分:0)
好吧,我甚至不理解你在那个中断处理程序中想要做什么:
void Timer5Handle(){
timer5_started=millis();
Serial.println("timer 5...");
while(1){
int a=0;
}
}
但是,您的中断处理程序在实际IRS中被调用,因此其他所有内容都会停止,包括所有其他中断(包括millis
计数和delays
)。而且由于无限循环,它永远存在。中断处理程序应尽可能短,以确保其他人不会错过。