Программный таймер
Таймер, который ядро RTOS строит на системном тике, а не на отдельном аппаратном регистре, — поэтому их может быть сколько позволяет память.
У микроконтроллера может быть четыре-восемь аппаратных таймеров, и большинство из них уже заняты ШИМ, выборкой АЦП и самим прерыванием тика. Программные таймеры обходят нехватку: ядро хранит отсортированный список моментов срабатывания и сверяет его со счётчиком тиков. По истечении времени вызывается колбэк — один раз (one-shot) или циклически (auto-reload).
В FreeRTOS все колбэки выполняются в одной выделенной задаче — службе таймеров, которую кормит очередь команд. Поэтому таймеры безопасно запускать из прерываний, но есть подвох: один блокирующийся колбэк останавливает все остальные таймеры в системе. Разрешение тоже не лучше одного тика, так что для микросекунд приходится возвращаться к железу.