Replies: 2 comments 4 replies
-
For a simpler Arduino way to do this, use Ticker. It works great and takes care of the timer setup/teardown. |
Beta Was this translation helpful? Give feedback.
-
my test code: TaskHandle_t cpHandle = NULL; void IRAM_ATTR TimercallBack() // timerAlarmEnable(timer1); void cp_task(void *ptr) while (1)
} void setup() { void loop() { } |
Beta Was this translation helpful? Give feedback.
-
The first initTimer() runs, and every call to initTimer() from the second onwards displays an error message on the serial monitor. can someone help me?
ESP-32 Timer test
LED_BUILTIN LED ON/OFF:
Serial Monitor
E (25015) timer_group: timer_isr_callback_add(236): register interrupt service failed
E (28015) timer_group: timer_isr_callback_add(236): register interrupt service failed
E (31015) timer_group: timer_isr_callback_add(236): register interrupt service failed
E (34015) timer_group: timer_isr_callback_add(236): register interrupt service failed
E (37015) timer_group: timer_isr_callback_add(236): register interrupt service failed
.....
////// code /////////////
unsigned long onesec_ms;
hw_timer_t * isrTimer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR offTimer(){
portENTER_CRITICAL_ISR(&timerMux);
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
portEXIT_CRITICAL_ISR(&timerMux);
};
void initTimer(){
isrTimer = timerBegin(1, 80, true);
timerAttachInterrupt(isrTimer, &offTimer, true);
timerAlarmWrite(isrTimer, 1000000, false); //1sec
timerAlarmEnable(isrTimer);
};
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
if ( millis() >= onesec_ms) {
onesec_ms = millis() + 3000;
initTimer();
}
}
Beta Was this translation helpful? Give feedback.
All reactions