platformSystem.c 3.8 KB

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