freertos.c 7.0 KB

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