, почти не занимающие времени. Похоже на стейт машину. Эти коротенькие обработчики оформить в виде массива функций. Объявить глобальную volatile-переменную, которая будет хранить индекс текущего состояния(шага). И в каждом вызываемом обработчике состояния либо присваивать ей значения следующго шага, либо повторять текущий шаг. Короче, очень прикольно: пишете такие коротенькие обработчики шагов и в конце каждого указываете, куда прыгать при следующем вызове. Сам вызов в цикле main может быть такой:
uc_GotoNstep = 0;
while(1){
task1();
task2();
(*Task_MeProg[ uc_GotoNstep ])();
}