workqueue.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /****************************************************************************
  2. *
  3. * Copyright (c) 2017, Michael Becker (michael.f.becker@gmail.com)
  4. *
  5. * This file is part of the FreeRTOS Add-ons project.
  6. *
  7. * Source Code:
  8. * https://github.com/michaelbecker/freertos-addons
  9. *
  10. * Project Page:
  11. * http://michaelbecker.github.io/freertos-addons/
  12. *
  13. * On-line Documentation:
  14. * http://michaelbecker.github.io/freertos-addons/docs/html/index.html
  15. *
  16. * Permission is hereby granted, free of charge, to any person obtaining a
  17. * copy of this software and associated documentation files
  18. * (the "Software"), to deal in the Software without restriction, including
  19. * without limitation the rights to use, copy, modify, merge, publish,
  20. * distribute, sublicense, and/or sell copies of the Software, and to
  21. * permit persons to whom the Software is furnished to do so,subject to the
  22. * following conditions:
  23. *
  24. * + The above copyright notice and this permission notice shall be included
  25. * in all copies or substantial portions of the Software.
  26. * + Credit is appreciated, but not required, if you find this project
  27. * useful enough to include in your application, product, device, etc.
  28. *
  29. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  30. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  31. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  32. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  33. * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  34. * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  35. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  36. *
  37. ***************************************************************************/
  38. #ifndef WORKQUEUE_H_
  39. #define WORKQUEUE_H_
  40. #include "FreeRTOS.h"
  41. #include "semphr.h"
  42. /**
  43. * All your work items are actually functions that take a
  44. * void * parameter.
  45. */
  46. typedef void (* WorkItem_t)(void *UserData);
  47. /**
  48. * Handle for the actual work queue.
  49. */
  50. typedef void * WorkQueue_t;
  51. /**
  52. * Default stack size of the Worker Task.
  53. */
  54. #define DEFAULT_WORK_QUEUE_STACK_SIZE (configMINIMAL_STACK_SIZE * 2)
  55. /**
  56. * Default task priority of the Worker Task.
  57. */
  58. #define DEFAULT_WORK_QUEUE_PRIORITY (tskIDLE_PRIORITY + 1)
  59. /**
  60. * Create a WorkQueue, specifying all options.
  61. *
  62. * @param Name The name of the worker thread.
  63. * @param StackSize The size of the worker thread stack, in words.
  64. * @param Priority The priority of the worker thread.
  65. * @return A handle, or NULL on error.
  66. */
  67. WorkQueue_t CreateWorkQueueEx( const char * const Name,
  68. uint16_t StackSize,
  69. UBaseType_t Priority);
  70. /**
  71. * Create a WorkQueue using the defaults.
  72. *
  73. * @return A handle, or NULL on error.
  74. */
  75. #define CreateWorkQueue() \
  76. CreateWorkQueueEx("wq", \
  77. DEFAULT_WORK_QUEUE_STACK_SIZE, \
  78. DEFAULT_WORK_QUEUE_PRIORITY) \
  79. #if (INCLUDE_vTaskDelete == 1)
  80. /**
  81. * Destroy a WorkQueue, if allowed.
  82. *
  83. * @param WorkQueue The work queue.
  84. */
  85. void DestroyWorkQueue(WorkQueue_t WorkQueue);
  86. #endif
  87. /**
  88. * Add an item of work onto the queue.
  89. *
  90. * @param WorkQueue The work queue.
  91. * @param WorkItem The function you want called.
  92. * @param UserData A value passed back to you.
  93. * @return pdPASS on success, pdFAIL on error.
  94. */
  95. int QueueWorkItem( WorkQueue_t WorkQueue,
  96. WorkItem_t WorkItem,
  97. void *UserData);
  98. #endif