2012年4月28日 星期六

簡單多工3版補強

主要是補充巨集。因為結構簡化,使用巨集就可以了。
巨集中的SKIP_CYCLE_TIME_US,請自己填入量測值,現在的4.14是Bee目前用的值,在不同應用值皆不同。
Time Constant是用在 Task_Set_Skip_Next中,可以用    Task_Set_Skip_Next(SKIP_US(25), NextFunction);    使工作延時約25us,但受限於掃描率的時間單位。只是不用自己去算次數,閱讀上也方便些。


void Sleep_Next(void (*p_func)(void));
void WakeUp(unsigned char n);
void Task_Set_Next(void (*p_func)(void));
void Task_Delay_Ms_Next(unsigned int n, void (*p_func)(void));
void Task_Set_Skip_Next(unsigned int n, void (*p_func)(void));


//  Task State
#define  TASK_RUNNING 0
#define  TASK_SKIP  1
#define  TASK_DELAY  2
#define  TASK_WAIT  3


// O.S. Macro
#define     SET_TASK(id,p_func)     {TaskFunc[id]=p_func;}
#define     SET_STATE(id,state)     {Task_State[id]=state;}
#define     SET_DELAY(id,n)         {Task_Delay_Count[id]=n;}


// Time Constant
#define     SKIP_CYCLE_TIME_US      (4.14)
#define     SKIP_TIME_CONSTANT      (1.0/SKIP_CYCLE_TIME_US)
#define     SKIP_US(x)              ((int)((x)*SKIP_TIME_CONSTANT))


沒有留言:

張貼留言