luat_rtos.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef LUAT_RTOS_H
  2. #define LUAT_RTOS_H
  3. #include "luat_base.h"
  4. //定时器回调函数需要定义成 LUAT_RT_RET_TYPE fun_name(LUAT_RT_CB_PARAM)
  5. //定时器回调函数退出时需要, return LUAT_RT_RET;
  6. #ifndef LUAT_RT_RET_TYPE
  7. #define LUAT_RT_RET_TYPE void
  8. #endif
  9. #ifndef LUAT_RT_RET
  10. #define LUAT_RT_RET
  11. #endif
  12. #ifndef LUAT_RT_CB_PARAM
  13. #define LUAT_RT_CB_PARAM void
  14. //#define LUAT_RT_CB_PARAM void *param
  15. //#define LUAT_RT_CB_PARAM void *pdata, void *param
  16. #endif
  17. /* ----------------------------------- thread ----------------------------------- */
  18. typedef int (*thread_entry) (void*);
  19. typedef void (*task_entry) (void*);
  20. typedef struct luat_thread{
  21. union
  22. {
  23. int id;
  24. void *handle;
  25. };
  26. union
  27. {
  28. thread_entry entry;
  29. task_entry task_fun;
  30. };
  31. const char *name;
  32. uint32_t stack_size;
  33. uint32_t* task_stk;
  34. uint32_t priority;
  35. char* stack_buff;
  36. void* userdata;
  37. }luat_thread_t;
  38. LUAT_RET luat_thread_start(luat_thread_t* thread);
  39. LUAT_RET luat_thread_stop(luat_thread_t* thread);
  40. LUAT_RET luat_thread_delete(luat_thread_t* thread);
  41. LUAT_RET luat_send_event_to_task(void *task_handle, uint32_t id, uint32_t param1, uint32_t param2, uint32_t param3);
  42. LUAT_RET luat_wait_event_from_task(void *task_handle, uint32_t wait_event_id, void *out_event, void *call_back, uint32_t ms);
  43. void *luat_get_current_task(void);
  44. /* ----------------------------------- semaphore ----------------------------------- */
  45. typedef struct luat_sem{
  46. const char *name;
  47. uint32_t value;
  48. uint8_t flag;
  49. void* userdata;
  50. }luat_sem_t;
  51. LUAT_RET luat_sem_create(luat_sem_t* semaphore);
  52. LUAT_RET luat_sem_delete(luat_sem_t* semaphore);
  53. LUAT_RET luat_sem_take(luat_sem_t* semaphore,uint32_t timeout);
  54. LUAT_RET luat_sem_release(luat_sem_t* semaphore);
  55. void *luat_mutex_create(void);
  56. LUAT_RET luat_mutex_lock(void *mutex);
  57. LUAT_RET luat_mutex_unlock(void *mutex);
  58. void luat_mutex_release(void *mutex);
  59. /* ----------------------------------- queue ----------------------------------- */
  60. typedef struct luat_rtos_queue {
  61. void* userdata;
  62. }luat_rtos_queue_t;
  63. LUAT_RET luat_queue_create(luat_rtos_queue_t* queue, size_t msgcount, size_t msgsize);
  64. LUAT_RET luat_queue_send(luat_rtos_queue_t* queue, void* msg, size_t msg_size, size_t timeout);
  65. LUAT_RET luat_queue_recv(luat_rtos_queue_t* queue, void* msg, size_t msg_size, size_t timeout);
  66. LUAT_RET luat_queue_reset(luat_rtos_queue_t* queue);
  67. LUAT_RET luat_queue_delete(luat_rtos_queue_t* queue);
  68. LUAT_RET luat_queue_free(luat_rtos_queue_t* queue);
  69. /* ----------------------------------- timer ----------------------------------- */
  70. void *luat_create_rtos_timer(void *cb, void *param, void *task_handle);
  71. int luat_start_rtos_timer(void *timer, uint32_t ms, uint8_t is_repeat);
  72. void luat_stop_rtos_timer(void *timer);
  73. void luat_release_rtos_timer(void *timer);
  74. void luat_task_suspend_all(void);
  75. void luat_task_resume_all(void);
  76. #endif