主要是補充巨集。因為結構簡化,使用巨集就可以了。
巨集中的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))