From 01064a82fa6abd06aedf41ffe327387008dc5761 Mon Sep 17 00:00:00 2001 From: Alexandre Bourdiol Date: Mon, 16 Dec 2019 14:30:05 +0100 Subject: [PATCH] HardwareTimer: set callback before enabling interrupt This is to avoid race condition. --- cores/arduino/HardwareTimer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cores/arduino/HardwareTimer.cpp b/cores/arduino/HardwareTimer.cpp index f211f9888b..870c4aa6cd 100644 --- a/cores/arduino/HardwareTimer.cpp +++ b/cores/arduino/HardwareTimer.cpp @@ -848,13 +848,13 @@ void HardwareTimer::setInterruptPriority(uint32_t preemptPriority, uint32_t subP */ void HardwareTimer::attachInterrupt(void (*callback)(HardwareTimer *)) { + callbacks[0] = callback; if (callback != NULL) { // Clear flag before enabling IT __HAL_TIM_CLEAR_FLAG(&(_timerObj.handle), TIM_FLAG_UPDATE); // Enable update interrupt only if callback is valid __HAL_TIM_ENABLE_IT(&(_timerObj.handle), TIM_IT_UPDATE); } - callbacks[0] = callback; } /** @@ -885,13 +885,13 @@ void HardwareTimer::attachInterrupt(uint32_t channel, void (*callback)(HardwareT Error_Handler(); // only channel 1..4 have an interrupt } + callbacks[channel] = callback; if (callback != NULL) { // Clear flag before enabling IT __HAL_TIM_CLEAR_FLAG(&(_timerObj.handle), interrupt); // Enable interrupt corresponding to channel, only if callback is valid __HAL_TIM_ENABLE_IT(&(_timerObj.handle), interrupt); } - callbacks[channel] = callback; } /**