Разбейте программу на модули. И сделайте разрешение засыпания. Проц проснулся, пробежался по модулям. В конце карусели опрос флага разрешения засыпания. Пробежался опять. И до тех пор, пока все функции и автоматы не пройдут все состояния до разрешения засыпания.