tpl.h 952 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. * 2021-04-27 flybreak the first version.
  9. */
  10. #pragma once
  11. #ifndef __cplusplus
  12. void ARMTPLInit();
  13. #else
  14. #include <rtthread.h>
  15. #define ARM_TPL_MAX_DELAY 1000
  16. #define ARM_TPL_THREAD_STACK_SIZE 4096
  17. enum arm_tpl_mutex_type
  18. {
  19. NORMAL,
  20. RECURSIVE,
  21. };
  22. struct arm_tpl_mutex_struct
  23. {
  24. rt_mutex_t mutex;
  25. arm_tpl_mutex_type type;
  26. };
  27. struct arm_tpl_thread_struct
  28. {
  29. rt_thread_t task;
  30. void *(*func)(void *);
  31. void *arg;
  32. rt_sem_t join_sem;
  33. rt_sem_t detach_sem;
  34. };
  35. class arm_tpl_cv
  36. {
  37. public:
  38. arm_tpl_cv();
  39. ~arm_tpl_cv();
  40. void wait(rt_mutex_t lock, bool recursive);
  41. int timedwait(rt_mutex_t lock, bool recursive, unsigned int timeout_ms);
  42. void signal();
  43. void broadcast();
  44. private:
  45. rt_sem_t s;
  46. rt_sem_t h;
  47. rt_mutex_t x;
  48. };
  49. #endif