timer_sample.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-08-24 yangjie the first version
  9. */
  10. /*
  11. * 程序清单:定时器例程
  12. *
  13. * 这个例程会创建两个动态定时器,一个是单次定时,一个是周期性定时
  14. * 并让周期定时器运行一段时间后停止运行
  15. */
  16. #include <rtthread.h>
  17. /* 定时器的控制块 */
  18. static rt_timer_t timer1;
  19. static rt_timer_t timer2;
  20. static int cnt = 0;
  21. /* 定时器1超时函数 */
  22. static void timeout1(void *parameter)
  23. {
  24. rt_kprintf("periodic timer is timeout %d\n", cnt);
  25. /* 运行第10次,停止周期定时器 */
  26. if (cnt++ >= 9)
  27. {
  28. rt_timer_stop(timer1);
  29. rt_kprintf("periodic timer was stopped! \n");
  30. }
  31. }
  32. /* 定时器2超时函数 */
  33. static void timeout2(void *parameter)
  34. {
  35. rt_kprintf("one shot timer is timeout\n");
  36. }
  37. int timer_sample(void)
  38. {
  39. /* 创建定时器1 周期定时器 */
  40. timer1 = rt_timer_create("timer1", timeout1,
  41. RT_NULL, 10,
  42. RT_TIMER_FLAG_PERIODIC);
  43. /* 启动定时器1 */
  44. if (timer1 != RT_NULL)
  45. rt_timer_start(timer1);
  46. /* 创建定时器2 单次定时器 */
  47. timer2 = rt_timer_create("timer2", timeout2,
  48. RT_NULL, 30,
  49. RT_TIMER_FLAG_ONE_SHOT);
  50. /* 启动定时器2 */
  51. if (timer2 != RT_NULL)
  52. rt_timer_start(timer2);
  53. return 0;
  54. }
  55. /* 导出到 msh 命令列表中 */
  56. MSH_CMD_EXPORT(timer_sample, timer sample);