分享

定时器的超时任务管理程序

 贤人好客 2010-02-18
定时器的超时任务管理程序
 
定时器的超时任务管理程序
[ 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=1sBeep关时间,*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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多