Какой цикл? при чем здесь цикл?
Задача говорит системе: "я буду спать до того как произойдет такое-то событие". Шедулер усыпляет задачу и передает ей снова управление только тогда, когда указанное событие произойдет. Если в этот момент выполняется задача с большим приоритетом- то шедулер подождет, пока это высокоприоритетная задача отдаст управление шедулеру, и наконец-то запустит эту задачу.
Никаких циклов и поедания ресурсов в этой ожидающей задаче нет.
А если Вам нужно просто задержку организовать- так это опять же через RTOS: задача говорит системе "разбуди меня через столько-то системных тиков", и все. Если ожидание меньше системного тика- то задача взводит аппаратный таймер и из прерывания этого таймера посылается сигнал. А задача говорит системе "разбуди меня, когда пришел сигнал от таймера".
И Вы как-то зациклились на расходе ОЗУ. Вам действительно настолько критичны те 64 байта на задачу плюс стек, и разово 236 байт на шедулер, которые нужны, например, freeRTOS?
Scheduler Itself: 236 bytes (can easily be reduced by using smaller data types).
For each queue you create, add: 76 bytes + queue storage area
For each task you create, add: 64 bytes (includes 4 characters for the task name) + the task stack size.
Про стек на задачу: это зависит. У меня, например, 128 элементов (128*4 байт), но тут можно и оптимизировать.