test_event_group_dynamic.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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: event group
  13. *
  14. * This demo demonstrates dynamically creating an event group and using it to send events between two tasks.
  15. *
  16. */
  17. #include <FreeRTOS.h>
  18. #include <event_groups.h>
  19. #include <task.h>
  20. #define TASK_PRIORITY (FINSH_THREAD_PRIORITY + 1)
  21. #define BIT_0 ( 1 << 0 )
  22. #define BIT_4 ( 1 << 4 )
  23. /* mutex handler */
  24. static EventGroupHandle_t xEventGroup = NULL;
  25. static TaskHandle_t TaskHandle1 = NULL;
  26. static TaskHandle_t TaskHandle2 = NULL;
  27. static void vTask1Code(void *pvParameters)
  28. {
  29. while (1)
  30. {
  31. EventBits_t uxBits;
  32. // Wait for either bit 0 or bit 4, clear bit before return
  33. uxBits = xEventGroupWaitBits(xEventGroup, BIT_0 | BIT_4, pdTRUE, pdFALSE, portMAX_DELAY);
  34. if ((uxBits & BIT_0) != 0)
  35. {
  36. rt_kprintf("Task 1 received bit 0\n");
  37. }
  38. if ((uxBits & BIT_4) != 0)
  39. {
  40. rt_kprintf("Task 1 received bit 4\n");
  41. }
  42. }
  43. }
  44. static void vTask2Code(void * pvParameters)
  45. {
  46. while (1)
  47. {
  48. rt_kprintf("Task 2 send bit 0\n");
  49. xEventGroupSetBits(xEventGroup, BIT_0);
  50. vTaskDelay(pdMS_TO_TICKS(1000));
  51. rt_kprintf("Task 2 send bit 4\n");
  52. xEventGroupSetBits(xEventGroup, BIT_4);
  53. vTaskDelay(pdMS_TO_TICKS(1000));
  54. }
  55. }
  56. int event_group_dynamic(void)
  57. {
  58. xEventGroup = xEventGroupCreate();
  59. vEventGroupDelete(xEventGroup);
  60. xEventGroup = xEventGroupCreate();
  61. if (xEventGroup == NULL)
  62. {
  63. rt_kprintf("create event group failed.\n");
  64. return -1;
  65. }
  66. xTaskCreate( vTask1Code, "Task1", configMINIMAL_STACK_SIZE, NULL, TASK_PRIORITY + 1, &TaskHandle1 );
  67. if (TaskHandle1 == NULL)
  68. {
  69. rt_kprintf("Create task 1 failed\n");
  70. return -1;
  71. }
  72. xTaskCreate( vTask2Code, "Task2", configMINIMAL_STACK_SIZE, NULL, TASK_PRIORITY, &TaskHandle2 );
  73. if (TaskHandle2 == NULL)
  74. {
  75. rt_kprintf("Create task 2 failed\n");
  76. return -1;
  77. }
  78. return 0;
  79. }
  80. MSH_CMD_EXPORT(event_group_dynamic, event group sample);