天天看點

分析 排程器 機制

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

這也是此排程器的靈魂所在!

繼續閱讀