diff --git a/libraries/AP_HAL/Scheduler.h b/libraries/AP_HAL/Scheduler.h index 09cb23cdd1..9a1d444565 100644 --- a/libraries/AP_HAL/Scheduler.h +++ b/libraries/AP_HAL/Scheduler.h @@ -22,6 +22,9 @@ public: uint32_t period_us) = 0; virtual void suspend_timer_procs() = 0; virtual void resume_timer_procs() = 0; + + virtual void begin_atomic() = 0; + virtual void end_atomic() = 0; }; #endif // __AP_HAL_SCHEDULER_H__ diff --git a/libraries/AP_HAL_AVR/Scheduler.cpp b/libraries/AP_HAL_AVR/Scheduler.cpp index 8dbd829cbe..29fb3aac5d 100644 --- a/libraries/AP_HAL_AVR/Scheduler.cpp +++ b/libraries/AP_HAL_AVR/Scheduler.cpp @@ -321,3 +321,11 @@ void ArduinoScheduler::_timer_event() { _in_timer_proc = false; } + +void ArduinoScheduler::begin_atomic() { + cli(); +} + +void ArduinoScheduler::end_atomic() { + sei(); +} diff --git a/libraries/AP_HAL_AVR/Scheduler.h b/libraries/AP_HAL_AVR/Scheduler.h index 272edc41c7..c7e5c52ad3 100644 --- a/libraries/AP_HAL_AVR/Scheduler.h +++ b/libraries/AP_HAL_AVR/Scheduler.h @@ -25,6 +25,8 @@ public: void register_timer_failsafe(AP_HAL::TimedProc, uint32_t period_us); void suspend_timer_procs(); void resume_timer_procs(); + void begin_atomic(); + void end_atomic(); private: /* Implementation specific methods: */