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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
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