Выглядит это примерно так:
void long_foo(void){
__CO_BEGIN();
{
...//чего-то делаем
}
__CO_RETURN();//выпадаем
//тут чего-то будем ждать
timeoutstart = current_timer;
while(time_elapsed(timeoutstart)< TCLK(TIMEOUT1)){//и если время вышло, то продолжим
//...
//WDT_Clear();
__CO_RETURN(); // иначе - выйдем из функции до следующего вызова, а затем попадём сюда-же в цикл
}
//выполняем дальше
...
__CO_RETURN();
...
__CO_END();//ну и типа закончили
}
Round-Robin - большой цикл - в нём функция (как и другие) вызывается либо постоянно, либо с началом следующего отрезка выполнения, например, каждую миллисекунду (нежёстко).