timer_sample.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (c) 2006-2022, 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. * 2020-10-17 Meco Man translate to English comment
  10. */
  11. /*
  12. * Demo: timer(s)
  13. *
  14. * This demo creates two dynamic timers:
  15. * 1) timer #1: one-shot mode timer
  16. * 2) timer #2: periodic mode timer
  17. *
  18. * read more:
  19. * https://www.rt-thread.io/document/site/programming-manual/timer/timer/#timer-management
  20. */
  21. #include <rtthread.h>
  22. /* timer handle */
  23. static rt_timer_t timer1;
  24. static rt_timer_t timer2;
  25. static int cnt = 0;
  26. /* timer #1 timeout callback function */
  27. static void timeout1(void *parameter)
  28. {
  29. rt_kprintf("periodic timer is timeout %d\n", cnt);
  30. if (cnt++ >= 9)
  31. {
  32. rt_timer_stop(timer1);
  33. rt_kprintf("periodic timer was stopped! \n");
  34. }
  35. }
  36. /* timer #2 timeout callback function */
  37. static void timeout2(void *parameter)
  38. {
  39. rt_kprintf("one shot timer is timeout\n");
  40. }
  41. int timer_sample(void)
  42. {
  43. /* create timer #1, periodic mode */
  44. timer1 = rt_timer_create("timer1", timeout1,
  45. RT_NULL, 10,
  46. RT_TIMER_FLAG_PERIODIC);
  47. /* start timer #1 */
  48. if (timer1 != RT_NULL)
  49. rt_timer_start(timer1);
  50. /* create timer #2, one-shot mode */
  51. timer2 = rt_timer_create("timer2", timeout2,
  52. RT_NULL, 30,
  53. RT_TIMER_FLAG_ONE_SHOT);
  54. /* start timer #2 */
  55. if (timer2 != RT_NULL)
  56. rt_timer_start(timer2);
  57. return 0;
  58. }
  59. /* export the msh command */
  60. MSH_CMD_EXPORT(timer_sample, timer sample);