Мое решение относительно мк и ос, не совсем уверен что подойдет Софтварные таймеры выполняются в наивысшем приоритете(аля имитируем хардварные). Если надо выполнить что-то продолжительное или не имеющее четких временных рамок(работа с периферией), то все что делает коллбек таймера - это запускает задачу/коллбэк-исполнения в пул потоков(== отдельные сделанные потоки/задачи которые просто ловят подобные вызовы, не только из таймеров, и выполняют их) с уже более низким приоритетом.