天天看点

分析 调度器 机制

#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__:  此行, 接着往下执行。

这也是此调度器的灵魂所在!

继续阅读