噪声和噪音的区别:定时器的超时任务管理程序

来源:百度文库 编辑:中财网 时间:2024/05/05 08:27:47
[ 2009-10-20 1:49:00 | By: yi19101 ]
1
推荐
仿人机器人日志撰写之余,给出一个定时器超时管理程序,相信对大家很有用处。
主要是实现:
1.定时任务处理,例如10ms处理一个任务
2.按规定次数执行定时任务,例如20ms处理一个任务,处理10次,定时任务结束时处理另外一个任务
3.任务有优先级,任务号越低,优先级越高
以下只给出h文件定义,详细代码见附件
//=======================================
//===========以下是h文件=================
//===========以8051F020为例==============
//=======================================
#ifndef __REALTIME_H__
#define __REALTIME_H__
//系统时钟
#define SYS_CLK 22.118400  //Mhz
//定时器重要时间
#define INT_TIME_MS   25  //定时器中断,单位ms
#define TIMES_NETSEND 40  //网络发送定时器,40*25=1000ms
#define TIMES_BEEPON  40  //Beep开时间,*25=1s;Beep关时间,*25=0.5s
#define TIMES_BEEPOFF 20
//定时器状态
#define TIME_STATUS_RUNNING (1)//启动状态
#define TIME_STATUS_STOPED  (0)//停止状态
//定时器操作函数
int RealTimerStart(float u_ms);//启动定时器ms,给定参数
void RealTimerStop(void);       //停止定时器
void TimeOutRountine(void);     //时间到服务程序
//定时器管理结构体
struct _TIMER_MANAGE
{
uchar RealTimerStatus;   //定时器状态
float TimerInterval;     //定时器时间间隔,单位ms
unsigned long ISR_Counter;//中断计数器
int (*RTimerStart)(float);
void (*RTimerStop)(void);
void (*TimeOutRountine)(void);
};
//定时器管理结构体初始化
#define REALTIMERINI {\
TIME_STATUS_STOPED,\
INT_TIME_MS,\
0,\
RealTimerStart,\
RealTimerStop,\
TimeOutRountine\
}
//超时任务数目,超时任务号越低,优先级越高
#define TIMEOUT_TASK_NUM 4
#define TIMEOUT_TASK_NETSEND   (0)
#define TIMEOUT_TASK_BEEP      (1)
#define TIMEOUT_TASK_TEMP      (2)
#define TIMEOUT_TASK_DELAY     (3)//延时任务
//超时计数器类型,unsigned char/unsigned int
#define TIMER_COUNTER_TCHAR 0x00
#define TIMER_COUNTER_TINT  0x01
#define TIMER_COUNTER_TYPE TIMER_COUNTER_TCHAR//默认char型
//时间超时管理结构体
struct _TIMEOUT_TASK_MANAGE {
uchar TimerEnable;       //定时器使能
#if TIMER_COUNTER_TYPE==TIMER_COUNTER_TCHAR
uchar TimerOutNum;       //定时器时间长度,定义为char型,最大计数单元为
uchar TimerCounter;      //定时器计数值,定义为char型,最大计数单元为
#else
uint TimerOutNum;        //定时器时间长度,定义为int型,最大计数单元为
uint TimerCounter;       //定时器计数值,定义为int型,最大计数单元为
#endif
uchar TimerOutFlag;      //超时标志
uchar TimerOutRunNum;    //执行次数,char型,执行次数为-255,当给定为时,执行无数次
uchar TimerOutRunFinish; //执行次数完成
void (*TimeOutTask)(void);//初始处理任务
void (*TimeOutRunFinishTask)(void);//执行完成触发的任务
};
//定时器超时任务函数
void TimeOutTaskManageIni(void);//定时器任务初始化
int PreciseDelayTime(float u_ms); //精确延时程序
#endif