1*10465441SEvalZero /* 2*10465441SEvalZero * 程序清单:动态定时器例程 3*10465441SEvalZero * 4*10465441SEvalZero * 这个例程会创建1个动态周期型定时器对象 5*10465441SEvalZero */ 6*10465441SEvalZero #include <rtthread.h> 7*10465441SEvalZero #include "tc_comm.h" 8*10465441SEvalZero 9*10465441SEvalZero /* 定时器的控制块 */ 10*10465441SEvalZero static rt_timer_t timer1; 11*10465441SEvalZero static rt_uint8_t count; 12*10465441SEvalZero 13*10465441SEvalZero /* 定时器超时函数 */ timeout1(void * parameter)14*10465441SEvalZerostatic void timeout1(void* parameter) 15*10465441SEvalZero { 16*10465441SEvalZero rt_kprintf("periodic timer is timeout\n"); 17*10465441SEvalZero 18*10465441SEvalZero count ++; 19*10465441SEvalZero /* 停止定时器自身 */ 20*10465441SEvalZero if (count >= 8) 21*10465441SEvalZero { 22*10465441SEvalZero /* 停止定时器 */ 23*10465441SEvalZero rt_timer_stop(timer1); 24*10465441SEvalZero count = 0; 25*10465441SEvalZero } 26*10465441SEvalZero } 27*10465441SEvalZero timer_stop_self_init()28*10465441SEvalZerovoid timer_stop_self_init() 29*10465441SEvalZero { 30*10465441SEvalZero /* 创建定时器1 */ 31*10465441SEvalZero timer1 = rt_timer_create("timer1", /* 定时器名字是 timer1 */ 32*10465441SEvalZero timeout1, /* 超时时回调的处理函数 */ 33*10465441SEvalZero RT_NULL, /* 超时函数的入口参数 */ 34*10465441SEvalZero 10, /* 定时长度,以OS Tick为单位,即10个OS Tick */ 35*10465441SEvalZero RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */ 36*10465441SEvalZero /* 启动定时器 */ 37*10465441SEvalZero if (timer1 != RT_NULL) 38*10465441SEvalZero rt_timer_start(timer1); 39*10465441SEvalZero else 40*10465441SEvalZero tc_stat(TC_STAT_END | TC_STAT_FAILED); 41*10465441SEvalZero } 42*10465441SEvalZero 43*10465441SEvalZero #ifdef RT_USING_TC _tc_cleanup()44*10465441SEvalZerostatic void _tc_cleanup() 45*10465441SEvalZero { 46*10465441SEvalZero /* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */ 47*10465441SEvalZero rt_enter_critical(); 48*10465441SEvalZero 49*10465441SEvalZero /* 删除定时器对象 */ 50*10465441SEvalZero rt_timer_delete(timer1); 51*10465441SEvalZero timer1 = RT_NULL; 52*10465441SEvalZero 53*10465441SEvalZero /* 调度器解锁 */ 54*10465441SEvalZero rt_exit_critical(); 55*10465441SEvalZero 56*10465441SEvalZero /* 设置TestCase状态 */ 57*10465441SEvalZero tc_done(TC_STAT_PASSED); 58*10465441SEvalZero } 59*10465441SEvalZero _tc_timer_stop_self()60*10465441SEvalZeroint _tc_timer_stop_self() 61*10465441SEvalZero { 62*10465441SEvalZero /* 设置TestCase清理回调函数 */ 63*10465441SEvalZero tc_cleanup(_tc_cleanup); 64*10465441SEvalZero 65*10465441SEvalZero /* 执行定时器例程 */ 66*10465441SEvalZero count = 0; 67*10465441SEvalZero timer_stop_self_init(); 68*10465441SEvalZero 69*10465441SEvalZero /* 返回TestCase运行的最长时间 */ 70*10465441SEvalZero return 100; 71*10465441SEvalZero } 72*10465441SEvalZero /* 输出函数命令到finsh shell中 */ 73*10465441SEvalZero FINSH_FUNCTION_EXPORT(_tc_timer_stop_self, a dynamic timer example); 74*10465441SEvalZero #else 75*10465441SEvalZero /* 用户应用入口 */ rt_application_init()76*10465441SEvalZeroint rt_application_init() 77*10465441SEvalZero { 78*10465441SEvalZero timer_stop_self_init(); 79*10465441SEvalZero 80*10465441SEvalZero return 0; 81*10465441SEvalZero } 82*10465441SEvalZero #endif 83