platformSystem.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "platformSystem.h"
  2. void *platformMemoryMalloc(size_t size)
  3. {
  4. return rt_malloc(size);
  5. }
  6. void platformMemoryFree(void *ptr)
  7. {
  8. rt_free(ptr);
  9. }
  10. /**
  11. * @brief ms延时
  12. *
  13. * @param ms
  14. */
  15. void platformDelay(uint32_t ms)
  16. {
  17. rt_thread_mdelay(ms);
  18. }
  19. /**
  20. * @brief 初始化并运行线程
  21. *
  22. * @param userData
  23. * @param platformThread
  24. * @param name
  25. * @param entry
  26. * @param param
  27. * @param stackSize
  28. * @param priority
  29. * @return RyanMqttError_e
  30. */
  31. RyanMqttError_e platformThreadInit(void *userData,
  32. platformThread_t *platformThread,
  33. const char *name,
  34. void (*entry)(void *),
  35. void *const param,
  36. uint32_t stackSize,
  37. uint32_t priority)
  38. {
  39. platformThread->thread = rt_thread_create(name, // 线程name
  40. entry, // 线程入口函数
  41. param, // 线程入口函数参数
  42. stackSize, // 线程栈大小
  43. priority, // 线程优先级
  44. 10); // 线程时间片
  45. if (RT_NULL == platformThread->thread)
  46. return RyanMqttNoRescourceError;
  47. rt_thread_startup(platformThread->thread);
  48. return RyanMqttSuccessError;
  49. }
  50. /**
  51. * @brief 销毁指定线程
  52. *
  53. * @param userData
  54. * @param platformThread
  55. * @return RyanMqttError_e
  56. */
  57. RyanMqttError_e platformThreadDestroy(void *userData, platformThread_t *platformThread)
  58. {
  59. rt_thread_delete(platformThread->thread);
  60. rt_schedule();
  61. return RyanMqttSuccessError;
  62. }
  63. /**
  64. * @brief 开启线程
  65. *
  66. * @param userData
  67. * @param platformThread
  68. * @return RyanMqttError_e
  69. */
  70. RyanMqttError_e platformThreadStart(void *userData, platformThread_t *platformThread)
  71. {
  72. rt_thread_resume(platformThread->thread);
  73. rt_schedule();
  74. return RyanMqttSuccessError;
  75. }
  76. /**
  77. * @brief 挂起线程
  78. *
  79. * @param userData
  80. * @param platformThread
  81. * @return RyanMqttError_e
  82. */
  83. RyanMqttError_e platformThreadStop(void *userData, platformThread_t *platformThread)
  84. {
  85. rt_thread_suspend(platformThread->thread);
  86. rt_schedule(); // rtthread挂起线程后应立即调用线程上下文切换函数
  87. return RyanMqttSuccessError;
  88. }
  89. /**
  90. * @brief 互斥锁初始化
  91. *
  92. * @param userData
  93. * @param platformMutex
  94. * @return RyanMqttError_e
  95. */
  96. RyanMqttError_e platformMutexInit(void *userData, platformMutex_t *platformMutex)
  97. {
  98. platformMutex->mutex = rt_mutex_create("mqttMutex", RT_IPC_FLAG_PRIO);
  99. return RyanMqttSuccessError;
  100. }
  101. /**
  102. * @brief 销毁互斥锁
  103. *
  104. * @param userData
  105. * @param platformMutex
  106. * @return RyanMqttError_e
  107. */
  108. RyanMqttError_e platformMutexDestroy(void *userData, platformMutex_t *platformMutex)
  109. {
  110. rt_mutex_delete(platformMutex->mutex);
  111. return RyanMqttSuccessError;
  112. }
  113. /**
  114. * @brief 阻塞获取互斥锁
  115. *
  116. * @param userData
  117. * @param platformMutex
  118. * @return RyanMqttError_e
  119. */
  120. RyanMqttError_e platformMutexLock(void *userData, platformMutex_t *platformMutex)
  121. {
  122. rt_mutex_take(platformMutex->mutex, RT_WAITING_FOREVER);
  123. return RyanMqttSuccessError;
  124. }
  125. /**
  126. * @brief 释放互斥锁
  127. *
  128. * @param userData
  129. * @param platformMutex
  130. * @return RyanMqttError_e
  131. */
  132. RyanMqttError_e platformMutexUnLock(void *userData, platformMutex_t *platformMutex)
  133. {
  134. rt_mutex_release(platformMutex->mutex);
  135. return RyanMqttSuccessError;
  136. }
  137. /**
  138. * @brief 进入临界区 / 关中断
  139. *
  140. */
  141. void platformCriticalEnter(void)
  142. {
  143. rt_enter_critical();
  144. }
  145. /**
  146. * @brief 退出临界区 / 开中断
  147. *
  148. */
  149. void platformCriticalExit(void)
  150. {
  151. rt_exit_critical();
  152. }