diff --git a/rt-thread-version/rt-thread-standard/programming-manual/timer/timer.md b/rt-thread-version/rt-thread-standard/programming-manual/timer/timer.md index 318b4a03fdd929dd17629dea32b7731a6907b23c..7c83cc932acc6176c735dcaade6745aef6082ff4 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/timer/timer.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/timer/timer.md @@ -355,7 +355,7 @@ rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void* arg); /* 定时器的控制块 */ static rt_timer_t timer1; static rt_timer_t timer2; -static int cnt = 0; +static rt_uint8_t cnt = 0; /* 定时器 1 超时函数 */ static void timeout1(void *parameter) @@ -365,6 +365,8 @@ static void timeout1(void *parameter) /* 运行第 10 次,停止周期定时器 */ if (cnt++>= 9) { + /* 清除计数值 */ + cnt = 0; rt_timer_stop(timer1); rt_kprintf("periodic timer was stopped! \n"); } @@ -376,8 +378,26 @@ static void timeout2(void *parameter) rt_kprintf("one shot timer is timeout\n"); } +/* 检查,清理上次的定时器 */ +static void check_timer_exist(void) +{ + if (timer1 != RT_NULL) + { + rt_timer_delete(timer1); + timer1 = RT_NULL; + } + if (timer2 != RT_NULL) + { + rt_timer_delete(timer2); + timer2 = RT_NULL; + } +} + int timer_sample(void) { + /* 检查,清理上次的定时器 */ + check_timer_exist(); + /* 创建定时器 1 周期定时器 */ timer1 = rt_timer_create("timer1", timeout1, RT_NULL, 10, @@ -443,6 +463,7 @@ static void timeout1(void* parameter) /* 运行 10 次 */ if (cnt++>= 9) { + cnt = 0; rt_timer_stop(&timer1); } } @@ -453,8 +474,23 @@ static void timeout2(void* parameter) rt_kprintf("one shot timer is timeout\n"); } +/* 检查,清理上次的定时器 */ +static void check_timer_exist(void) +{ + if (rt_object_find("timer1", RT_Object_Class_Timer) != RT_NULL) + { + rt_timer_detach(&timer1); + } + if (rt_object_find("timer2", RT_Object_Class_Timer) != RT_NULL) + { + rt_timer_detach(&timer2); + } +} + int timer_static_sample(void) { + /* 检查,清理上次的定时器 */ + check_timer_exist(); /* 初始化定时器 */ rt_timer_init(&timer1, "timer1", /* 定时器名字是 timer1 */ timeout1, /* 超时时回调的处理函数 */