#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__: 此行, 接着往下执行。
这也是此调度器的灵魂所在!