freertos.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * File Name : freertos.c
  5. * Description : Code for freertos applications
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2025 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. /* USER CODE END Header */
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "FreeRTOS.h"
  21. #include "task.h"
  22. #include "main.h"
  23. #include "cmsis_os.h"
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. //#include "CAT_LOG.h"
  27. #include "bsp.h"
  28. #include "pwm.h"
  29. #include "iwdg.h"
  30. /* USER CODE END Includes */
  31. /* Private typedef -----------------------------------------------------------*/
  32. /* USER CODE BEGIN PTD */
  33. uint16_t Temp_Tim=0;
  34. /* USER CODE END PTD */
  35. /* Private define ------------------------------------------------------------*/
  36. /* USER CODE BEGIN PD */
  37. /* USER CODE END PD */
  38. /* Private macro -------------------------------------------------------------*/
  39. /* USER CODE BEGIN PM */
  40. /* USER CODE END PM */
  41. /* Private variables ---------------------------------------------------------*/
  42. /* USER CODE BEGIN Variables */
  43. /* USER CODE END Variables */
  44. /* Definitions for defaultTask */
  45. osThreadId_t defaultTaskHandle;
  46. const osThreadAttr_t defaultTask_attributes = {
  47. .name = "defaultTask",
  48. .stack_size = 512 * 4,
  49. .priority = (osPriority_t) osPriorityHigh,
  50. };
  51. /* Definitions for myTask02 */
  52. osThreadId_t myTask02Handle;
  53. const osThreadAttr_t myTask02_attributes = {
  54. .name = "myTask02",
  55. .stack_size = 512 * 4,
  56. .priority = (osPriority_t) osPriorityAboveNormal,
  57. };
  58. /* Definitions for myTask03 */
  59. osThreadId_t myTask03Handle;
  60. const osThreadAttr_t myTask03_attributes = {
  61. .name = "myTask03",
  62. .stack_size = 512 * 4,
  63. .priority = (osPriority_t) osPriorityBelowNormal,
  64. };
  65. /* Definitions for myTimer01 */
  66. osTimerId_t myTimer01Handle;
  67. const osTimerAttr_t myTimer01_attributes = {
  68. .name = "myTimer01"
  69. };
  70. /* Private function prototypes -----------------------------------------------*/
  71. /* USER CODE BEGIN FunctionPrototypes */
  72. /* USER CODE END FunctionPrototypes */
  73. void StartDefaultTask(void *argument);
  74. void Task02(void *argument);
  75. void Task03(void *argument);
  76. void Callback01(void *argument);
  77. void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
  78. /**
  79. * @brief FreeRTOS initialization
  80. * @param None
  81. * @retval None
  82. */
  83. void MX_FREERTOS_Init(void) {
  84. /* USER CODE BEGIN Init */
  85. /* USER CODE END Init */
  86. /* USER CODE BEGIN RTOS_MUTEX */
  87. /* add mutexes, ... */
  88. /* USER CODE END RTOS_MUTEX */
  89. /* USER CODE BEGIN RTOS_SEMAPHORES */
  90. /* add semaphores, ... */
  91. /* USER CODE END RTOS_SEMAPHORES */
  92. /* Create the timer(s) */
  93. /* creation of myTimer01 */
  94. myTimer01Handle = osTimerNew(Callback01, osTimerPeriodic, NULL, &myTimer01_attributes);
  95. /* USER CODE BEGIN RTOS_TIMERS */
  96. /* start timers, add new ones, ... */
  97. /* USER CODE END RTOS_TIMERS */
  98. /* USER CODE BEGIN RTOS_QUEUES */
  99. /* add queues, ... */
  100. /* USER CODE END RTOS_QUEUES */
  101. /* Create the thread(s) */
  102. /* creation of defaultTask */
  103. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  104. /* creation of myTask02 */
  105. myTask02Handle = osThreadNew(Task02, NULL, &myTask02_attributes);
  106. /* creation of myTask03 */
  107. myTask03Handle = osThreadNew(Task03, NULL, &myTask03_attributes);
  108. /* USER CODE BEGIN RTOS_THREADS */
  109. /* add threads, ... */
  110. /* USER CODE END RTOS_THREADS */
  111. /* USER CODE BEGIN RTOS_EVENTS */
  112. /* add events, ... */
  113. /* USER CODE END RTOS_EVENTS */
  114. }
  115. /* USER CODE BEGIN Header_StartDefaultTask */
  116. /**
  117. * @brief Function implementing the defaultTask thread.
  118. * @param argument: Not used
  119. * @retval None
  120. */
  121. /* USER CODE END Header_StartDefaultTask */
  122. void StartDefaultTask(void *argument)
  123. {
  124. /* USER CODE BEGIN StartDefaultTask */
  125. osTimerStart(myTimer01Handle,500);//500代表回调函数回调周期
  126. /* Infinite loop */
  127. while(1)
  128. {
  129. /* 喂狗 */
  130. HAL_GPIO_TogglePin(GPIOE, LED0_Pin);
  131. HAL_IWDG_Refresh(&hiwdg); //约1s
  132. osDelay(800);
  133. }
  134. /* USER CODE END StartDefaultTask */
  135. }
  136. /* USER CODE BEGIN Header_Task02 */
  137. /**
  138. * @brief Function implementing the myTask02 thread.
  139. * @param argument: Not used
  140. * @retval None
  141. */
  142. /* USER CODE END Header_Task02 */
  143. void Task02(void *argument)
  144. {
  145. /* USER CODE BEGIN Task02 */
  146. uint16_t Temp_time=0;
  147. // Tim_PWM(&htim9,0,NULL,75);
  148. /* Infinite loop */
  149. while(1)
  150. {
  151. Recive_Handle_Usart1 (); // SBUS
  152. UBaseType_t uxHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 获取当前任务的栈历史最小剩余空间(字节)
  153. Temp_time++;
  154. if(Temp_time%2000==0)
  155. {
  156. // LOGM("Task02_Remaining space: %d \n",uxHighWaterMark);
  157. //Send_RTK_Fre(); // 每 10秒发送 1次 设置频率 if(gpsx.gpssta == 0)
  158. }
  159. if(Temp_time>=60000)Temp_time=0;
  160. osDelay(5);
  161. }
  162. /* USER CODE END Task02 */
  163. }
  164. /* USER CODE BEGIN Header_Task03 */
  165. /**
  166. * @brief Function implementing the myTask03 thread.
  167. * @param argument: Not used
  168. * @retval None
  169. */
  170. /* USER CODE END Header_Task03 */
  171. void Task03(void *argument)
  172. {
  173. /* USER CODE BEGIN Task03 */
  174. uint16_t Temp_time=0;
  175. /* Infinite loop */
  176. while(1)
  177. {
  178. HAL_GPIO_TogglePin(GPIOE, LED1_Pin);
  179. Time_Slicing(); // 请求错误状态
  180. Sbus_Can_Handle(); // 运动模式
  181. UBaseType_t uxHighWaterMark = uxTaskGetStackHighWaterMark(NULL);// 获取当前任务的栈历史最小剩余空间(字节)
  182. Temp_time++;
  183. if(Temp_time%20==0)
  184. {
  185. // LOGM("Task03_Remaining space: %d \n",uxHighWaterMark);
  186. }
  187. if(Temp_time>=60000)Temp_time=0;
  188. osDelay(500);
  189. }
  190. /* USER CODE END Task03 */
  191. }
  192. /* Callback01 function */
  193. void Callback01(void *argument)
  194. {
  195. /* USER CODE BEGIN Callback01 */
  196. Temp_Tim++;
  197. HAL_GPIO_TogglePin(GPIOG, LED2_Pin);
  198. size_t uxCurrentFreeHeapSize = xPortGetFreeHeapSize(); // 获取当前可用堆大小(字节)
  199. size_t uxMinimumEverFreeHeapSize = xPortGetMinimumEverFreeHeapSize(); // 获取系统运行过程中出现过的最小可用堆大小(用于检测内存是否紧张)
  200. if(Temp_Tim%20==0)
  201. {
  202. // LOGM("Global remaining space AND MIN_space: %d,%d\n",uxCurrentFreeHeapSize,uxMinimumEverFreeHeapSize);
  203. }
  204. if(Temp_Tim>=60000)Temp_Tim=0;
  205. /* USER CODE END Callback01 */
  206. }
  207. /* Private application code --------------------------------------------------*/
  208. /* USER CODE BEGIN Application */
  209. /* USER CODE END Application */