#ifndef _TASK_H_ #define _TASK_H_ //#define _DEBUG //#undef _DEBUG //#define printf myprintf #include "stm8s.h" #include "stm8s_clk.h" #include "stm8s_tim4.h" #include "uart.h" #include "stm8s_iwdg.h" /****************************************************************************** about task *******************************************************************************/ /*----------------------------------------------------------------------------- 定义任务表,增加任务时需在此增加表项。 -------------------------------------------------------------------------------*/ enum TASK_TYPE {TASK_TIMER=1,TASK_BLINK,TASK_IO,TASK_BEEP,TASK_WDT,TASK_HANDWARN,TASK_WARN, TASK_STOPMOTOR,TASK_FEED, TASK_PHASE,TASK_FREQ,TASK_FREQ2,TASK_CHECK_MOTOR,TASK_SENSOR,TASK_KEY,TASK_STATE,TASK_POWER_CHECK,TASK_BREAK, TASK_CHARGE , TASK_CHECK_COIL,TASK_SEG7,TASK_COMM }; #define TICKCOUNT (1000L) //系统时间脉冲为1000次 #define PHASE_PRIOD 2000L enum TASK_MODE {TASK_MODE_ONCE,TASK_MODE_PERIOD}; typedef unsigned char UCHAR; typedef unsigned long ULONG; typedef unsigned int UINT; typedef unsigned short USHORT; typedef void * PVOID; typedef signed char SCHAR; typedef signed long SLONG ; typedef signed int SINT; typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef struct task { UCHAR cActive; // >0:活动,1:初始化后立即启动 UCHAR cTaskMode; // 任务工作方式 SLONG lLastTime; ULONG lPeriod; // 活动周期,uint=1mS UCHAR cType; // 任务类型 void (*TaskProc)(void); // 任务处理子程序 }TASK_DATA; /*************************************************************************** about timer ****************************************************************************/ #define MAX_TIMER 8 // the number of timer can be used #define TIMER_MODE_TIMER 0 // mode constant: timer only #define TIMER_MODE_ONCEROUTINE 1 // timerly routine ( once ) #define TIMER_MODE_CYCROUTINE 2 // cyclely routine // define timer data struct typedef struct mytimer { UCHAR cUse; UCHAR cMode; // timer work mode long lPeriod; // timer period, unit=10ms. long lLastTime; // timer count for reload void (*routine)(void * Param1); // user's timer routine void * Param1; }TIMER_DATA; extern TIMER_DATA TimerData[MAX_TIMER]; extern GPIO_TypeDef PortD; typedef struct { UINT iYear; // year since 2000 UCHAR cMon; // months since January - [1, 12] UCHAR cDay; // day of the month - [1, 31] UCHAR cHour; // hours since midnight - [0, 23] UCHAR cMin; // minutes after the hour - [0, 59 ] UCHAR cSec; // seconds after the minute - [0, 59] }TIME; typedef unsigned long time_t; // function prototype void Init_task_timer(void); void TaskTimer(void); void TaskProc(void); //Task Function void ActiveTask(UCHAR cTaskType, ULONG lPeriod); void ActiveTaskNow(UCHAR cTaskType, ULONG lPeriod); void SetTaskLastTime(UCHAR cTaskType,ULONG lLastTime); void SuspendTask(UCHAR cTaskType); //Timer Function SCHAR StartTimer(UCHAR cMode,ULONG lPeriod,void (* routine)(void * Param1),void * Param1); SCHAR StopTimer (SCHAR * pcTimerNumber ); void StopAllTimer(void); // void Init_task(void); void InitPLL(void); void TaskBlinLed(void); void Delay(UINT delayCnt); void ProgramOptionByte(void); void ModifyOptionByte(void); //day time time_t MakeTime(TIME *ptm); void LocalTime(TIME *t,time_t *tSec); #define Disable() _asm("sim") #define Enable() _asm("rim") #define _nop_() _asm("nop") extern TASK_DATA @near TaskDb[] ; /////////////////////////////////////////// /////////////////////////////////////////// #endif