#define _SS static char lc=0; switch(lc){ case 0: lc=0;
#define _EE }; lc=0;
#define WaitX(a,b) settimer(&lc,__LINE__,a,b); return ; case __LINE__:
struct TASK {
char td;
void (*fp)();
};
此排程器的巧妙之處就在 lc,剛進入task時 lc=0, 就會按正常task路徑運作,但是如果遇到WaitX(a,b) 時,就會把目前行号__LINE__儲存到 lc 中,然後退出task, 直到定時器變0再次進入task,但此時就會直接跳到case __LINE__: 此行, 接着往下執行。
這也是此排程器的靈魂所在!