platformSystem.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #include "platformSystem.h"
  2. #include "RyanMqttPlatform.h"
  3. /**
  4. * @brief 申请内存
  5. *
  6. * @param size
  7. * @return void*
  8. */
  9. inline void *platformMemoryMalloc(size_t size)
  10. {
  11. return luat_heap_malloc(size);
  12. }
  13. /**
  14. * @brief 释放内存
  15. *
  16. * @param ptr
  17. */
  18. inline void platformMemoryFree(void *ptr)
  19. {
  20. luat_heap_free(ptr);
  21. }
  22. /**
  23. * @brief ms延时
  24. *
  25. * @param ms
  26. */
  27. inline void platformDelay(uint32_t ms)
  28. {
  29. luat_rtos_task_sleep(luat_rtos_ms2tick(ms));
  30. }
  31. uint32_t platformUptimeMs(void)
  32. {
  33. if (1000 == luat_mcu_hz())
  34. {
  35. return (uint32_t)luat_mcu_ticks();
  36. }
  37. // 已经不能提供精准的ms了
  38. uint32_t tick = luat_mcu_ticks();
  39. return (uint32_t)(((uint64_t)tick * 1000 + luat_mcu_hz() - 1) / luat_mcu_hz());
  40. }
  41. /**
  42. * @brief 打印字符串函数,可通过串口打印出去
  43. *
  44. * @param str
  45. * @param strLen
  46. */
  47. inline void platformPrint(char *str, uint16_t strLen)
  48. {
  49. luat_debug_print("%.*s", strLen, str);
  50. }
  51. /**
  52. * @brief 初始化并运行线程
  53. *
  54. * @param userData
  55. * @param platformThread
  56. * @param name
  57. * @param entry
  58. * @param param
  59. * @param stackSize
  60. * @param priority
  61. * @return RyanMqttError_e
  62. */
  63. RyanMqttError_e platformThreadInit(void *userData, platformThread_t *platformThread, const char *name,
  64. void (*entry)(void *), void *const param, uint32_t stackSize, uint32_t priority)
  65. {
  66. // 36 减
  67. int32_t result = luat_rtos_task_create(&platformThread->thread, // 线程句柄
  68. stackSize, // 线程栈大小
  69. priority, // 线程优先级
  70. name, // 线程name
  71. entry, // 线程入口函数
  72. param, // 线程入口函数参数
  73. 0);
  74. if (0 != result)
  75. {
  76. return RyanMqttNoRescourceError;
  77. }
  78. return RyanMqttSuccessError;
  79. }
  80. /**
  81. * @brief 销毁自身线程
  82. *
  83. * @param userData
  84. * @param platformThread
  85. * @return RyanMqttError_e
  86. */
  87. RyanMqttError_e platformThreadDestroy(void *userData, platformThread_t *platformThread)
  88. {
  89. luat_rtos_task_delete(platformThread->thread);
  90. return RyanMqttSuccessError;
  91. }
  92. /**
  93. * @brief 开启线程
  94. *
  95. * @param userData
  96. * @param platformThread
  97. * @return RyanMqttError_e
  98. */
  99. RyanMqttError_e platformThreadStart(void *userData, platformThread_t *platformThread)
  100. {
  101. luat_rtos_task_resume(platformThread->thread);
  102. return RyanMqttSuccessError;
  103. }
  104. /**
  105. * @brief 挂起线程
  106. *
  107. * @param userData
  108. * @param platformThread
  109. * @return RyanMqttError_e
  110. */
  111. RyanMqttError_e platformThreadStop(void *userData, platformThread_t *platformThread)
  112. {
  113. luat_rtos_task_suspend(platformThread->thread);
  114. return RyanMqttSuccessError;
  115. }
  116. /**
  117. * @brief 互斥锁初始化
  118. *
  119. * @param userData
  120. * @param platformMutex
  121. * @return RyanMqttError_e
  122. */
  123. RyanMqttError_e platformMutexInit(void *userData, platformMutex_t *platformMutex)
  124. {
  125. luat_rtos_mutex_create(&platformMutex->mutex);
  126. return RyanMqttSuccessError;
  127. }
  128. /**
  129. * @brief 销毁互斥锁
  130. *
  131. * @param userData
  132. * @param platformMutex
  133. * @return RyanMqttError_e
  134. */
  135. RyanMqttError_e platformMutexDestroy(void *userData, platformMutex_t *platformMutex)
  136. {
  137. luat_rtos_mutex_delete(platformMutex->mutex);
  138. return RyanMqttSuccessError;
  139. }
  140. /**
  141. * @brief 阻塞获取互斥锁
  142. *
  143. * @param userData
  144. * @param platformMutex
  145. * @return RyanMqttError_e
  146. */
  147. RyanMqttError_e platformMutexLock(void *userData, platformMutex_t *platformMutex)
  148. {
  149. luat_rtos_mutex_lock(platformMutex->mutex, LUAT_WAIT_FOREVER);
  150. return RyanMqttSuccessError;
  151. }
  152. /**
  153. * @brief 释放互斥锁
  154. *
  155. * @param userData
  156. * @param platformMutex
  157. * @return RyanMqttError_e
  158. */
  159. RyanMqttError_e platformMutexUnLock(void *userData, platformMutex_t *platformMutex)
  160. {
  161. luat_rtos_mutex_unlock(platformMutex->mutex);
  162. return RyanMqttSuccessError;
  163. }
  164. /**
  165. * @brief 临界区初始化
  166. *
  167. * @param userData
  168. * @param platformCritical
  169. * @return RyanMqttError_e
  170. */
  171. RyanMqttError_e platformCriticalInit(void *userData, platformCritical_t *platformCritical)
  172. {
  173. return RyanMqttSuccessError;
  174. }
  175. /**
  176. * @brief 销毁临界区
  177. *
  178. * @param userData
  179. * @param platformCritical
  180. * @return RyanMqttError_e
  181. */
  182. RyanMqttError_e platformCriticalDestroy(void *userData, platformCritical_t *platformCritical)
  183. {
  184. return RyanMqttSuccessError;
  185. }
  186. /**
  187. * @brief 进入临界区
  188. *
  189. * @param userData
  190. * @param platformCritical
  191. * @return RyanMqttError_e
  192. */
  193. inline RyanMqttError_e platformCriticalEnter(void *userData, platformCritical_t *platformCritical)
  194. {
  195. platformCritical->level = luat_rtos_entry_critical();
  196. return RyanMqttSuccessError;
  197. }
  198. /**
  199. * @brief 退出临界区
  200. *
  201. * @param userData
  202. * @param platformCritical
  203. * @return RyanMqttError_e
  204. */
  205. inline RyanMqttError_e platformCriticalExit(void *userData, platformCritical_t *platformCritical)
  206. {
  207. luat_rtos_exit_critical(platformCritical->level);
  208. return RyanMqttSuccessError;
  209. }