Skip to content

Commit d2ebcd5

Browse files
ABOSTMfpistm
authored andcommitted
HardwareTimer: set callback before enabling interrupt
This is to avoid race condition.
1 parent 4b515fb commit d2ebcd5

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

Diff for: cores/arduino/HardwareTimer.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -848,13 +848,13 @@ void HardwareTimer::setInterruptPriority(uint32_t preemptPriority, uint32_t subP
848848
*/
849849
void HardwareTimer::attachInterrupt(void (*callback)(HardwareTimer *))
850850
{
851+
callbacks[0] = callback;
851852
if (callback != NULL) {
852853
// Clear flag before enabling IT
853854
__HAL_TIM_CLEAR_FLAG(&(_timerObj.handle), TIM_FLAG_UPDATE);
854855
// Enable update interrupt only if callback is valid
855856
__HAL_TIM_ENABLE_IT(&(_timerObj.handle), TIM_IT_UPDATE);
856857
}
857-
callbacks[0] = callback;
858858
}
859859

860860
/**
@@ -885,13 +885,13 @@ void HardwareTimer::attachInterrupt(uint32_t channel, void (*callback)(HardwareT
885885
Error_Handler(); // only channel 1..4 have an interrupt
886886
}
887887

888+
callbacks[channel] = callback;
888889
if (callback != NULL) {
889890
// Clear flag before enabling IT
890891
__HAL_TIM_CLEAR_FLAG(&(_timerObj.handle), interrupt);
891892
// Enable interrupt corresponding to channel, only if callback is valid
892893
__HAL_TIM_ENABLE_IT(&(_timerObj.handle), interrupt);
893894
}
894-
callbacks[channel] = callback;
895895
}
896896

897897
/**

0 commit comments

Comments
 (0)