本帖最后由 ayb_ice 于 2013-1-29 15:35 编辑
我的系统基于10MS周期
所以
#define MS /10
#define SECOND *100
sys_simple_timer_set_with_ready_select(true, SYS_SIMPER_TIMER_AUTO_SELECT, SYS_SIMPLE_TIMER_MSG_SAVE_CAL, 20MS);
自动分配定时器是这样的
一般程序员可能有这样的需求
10秒后做某个动作,
这个确实不需要指定哪个定时器完成,只要10秒后能做这个动作即可,通过指定消息的ID来达到目的,比如SYS_SIMPLE_TIMER_MSG_SAVE_CAL, 20M就是20毫秒后执行SYS_SIMPLE_TIMER_MSG_SAVE_CAL动作(保存校准数据),随便分配一个定时器,将时间,ID保存起来即可,定时器动作后通过回调函数完成指定功能,同时将ID作为回调函数参数即可,同时会有一个参数是定时器编号,一般不需要使用,只是为了支持指定定时器编号的传统调用方式,
那么不同的功能只要指定不同的ID即可,回调函数调用一次自动清除相应的定时器数据,下一次又可以被分配了
void sys_simple_timer_isr_interface(U8 n, U8 m)
{
//--------------------------------
// 参数判断
if(n >= MAX_SYS_SIMPLE_TIMER){
m = 0;
// __error();
__warning();
return;
}
//--------------------------------
// 定制代码
#if 1 // 快速屏蔽用户代码
switch(m){
// static U8 t = 1000MS;
case SYS_SIMPLE_TIMER_MSG_ANY:
__message("空命令,不可使用.");
break;
case SYS_SIMPLE_TIMER_MSG_SAVE_CAL:
c8051f_eeprom_backup(false);
pcf8576_string_display(0, "S.CAL", 1000MS);
break;
.................
|