mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
feat(esp_timer): esp_timer_is_active while callback is running
This commit is contained in:
@@ -38,6 +38,7 @@
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
FL_ISR_DISPATCH_METHOD = (1 << 0), //!< 0=Callback is called from timer task, 1=Callback is called from timer ISR
|
FL_ISR_DISPATCH_METHOD = (1 << 0), //!< 0=Callback is called from timer task, 1=Callback is called from timer ISR
|
||||||
FL_SKIP_UNHANDLED_EVENTS = (1 << 1), //!< 0=NOT skip unhandled events for periodic timers, 1=Skip unhandled events for periodic timers
|
FL_SKIP_UNHANDLED_EVENTS = (1 << 1), //!< 0=NOT skip unhandled events for periodic timers, 1=Skip unhandled events for periodic timers
|
||||||
|
FL_CALLBACK_IS_RUNNING = (1 << 2), //!< 0=Callback is NOT running, 1=Callback is running
|
||||||
} flags_t;
|
} flags_t;
|
||||||
|
|
||||||
struct esp_timer {
|
struct esp_timer {
|
||||||
@@ -409,6 +410,7 @@ static bool timer_process_alarm(esp_timer_dispatch_t dispatch_method)
|
|||||||
free(it);
|
free(it);
|
||||||
it = NULL;
|
it = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
it->flags |= FL_CALLBACK_IS_RUNNING;
|
||||||
if (it->period > 0) {
|
if (it->period > 0) {
|
||||||
int skipped = (now - it->alarm) / it->period;
|
int skipped = (now - it->alarm) / it->period;
|
||||||
if ((it->flags & FL_SKIP_UNHANDLED_EVENTS) && (skipped > 1)) {
|
if ((it->flags & FL_SKIP_UNHANDLED_EVENTS) && (skipped > 1)) {
|
||||||
@@ -434,6 +436,7 @@ static bool timer_process_alarm(esp_timer_dispatch_t dispatch_method)
|
|||||||
timer_list_unlock(dispatch_method);
|
timer_list_unlock(dispatch_method);
|
||||||
(*callback)(arg);
|
(*callback)(arg);
|
||||||
timer_list_lock(dispatch_method);
|
timer_list_lock(dispatch_method);
|
||||||
|
it->flags &= ~FL_CALLBACK_IS_RUNNING;
|
||||||
#if WITH_PROFILING
|
#if WITH_PROFILING
|
||||||
it->times_triggered++;
|
it->times_triggered++;
|
||||||
it->total_callback_run_time += esp_timer_impl_get_time() - callback_start;
|
it->total_callback_run_time += esp_timer_impl_get_time() - callback_start;
|
||||||
@@ -764,5 +767,5 @@ bool IRAM_ATTR esp_timer_is_active(esp_timer_handle_t timer)
|
|||||||
if (timer == NULL) {
|
if (timer == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return timer_armed(timer);
|
return timer_armed(timer) || (timer->flags & FL_CALLBACK_IS_RUNNING);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user