Использовал таймауты с сравнением с xTaskGetTickCount. Потом вдруг понял, что дней через 50 все может перестать работать, потому что произойдет переполнение счетчика тиков. В ядре FreeRTOS с этой проблемой уже поборолись, там есть счетчик переполнений.
Заодно нагуглилось такое решение, правда нужно еще 4 байта в памяти на каждый таймаут.
Возможно, это элементарно - но вдруг кому-то поможет.
Еще есть похожая тема на официальном форуме FreeRTOS.