Иногда мне нужно немедленно остановить программный таймер в FreeRTOS и соответствующую функцию обратного вызова, но я обнаружил, что иногда для остановки таймера требуется 2 рабочих цикла.
if (pdPASS != xTimerStop(my_timer, OSTIMER_WAIT_FOR_QUEUE))
{
//error
}
В качестве исправления я добавил глобальный флаг, чтобы установить его, когда мне нужно остановить этот таймер, а затем проверить значение флага в функции обратного вызова таймера.
Я знаю, что это проблема, потому что FreeRTOS отправляет команду остановки в очередь ядра, и у нее есть некоторая задержка (в зависимости от состояния системы), пока таймер действительно не получит команду и остановится, но есть ли лучший способ, чем добавить флаг в код?
Спасибо