FreeRTOS --- mutex use of printf

 1 #ifdef __GNUC__
 2     #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
 3 #else
 4     #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
 5 #endif   
 6 
 7 /*retargets the C library printf function to the USART*/
 8 PUTCHAR_PROTOTYPE
 9 {
10     HAL_UART_Transmit(&huart1,(uint8_t*)&ch, 1, 0xFFFF);
11     return ch;
12 }

 1 void  Debug_Printf(char *format, ...)
 2 {
 3     char  buf_str[128];
 4     va_list   v_args;
 5 
 6 
 7     va_start(v_args, format);
 8    (void)vsnprintf((char       *)&buf_str[0],
 9                    (size_t      ) sizeof(buf_str),
10                    (char const *) format,
11                                   v_args);
12     to va_end (v_args);
 13 is  
14      / * mutex * / 
15      osMutexWait (Mutex_printfHandle, osWaitForever);
 16      the printf ( " % S " , buf_str);
 . 17      osMutexRelease (Mutex_printfHandle);
 18 is }

 1  /* definition and creation of vTask1 */
 2   osThreadDef(vTask1, Task1, osPriorityNormal, 0, 256);
 3   vTask1Handle = osThreadCreate(osThread(vTask1), NULL);
 4 
 5   /* definition and creation of vTask2 */
 6   osThreadDef(vTask2, Task2, osPriorityNormal, 0, 256);
 7   vTask2Handle = osThreadCreate(osThread(vTask2), NULL);
 8 
 9 void Task1(void const * argument)
10 {
11 
12   /* USER CODE BEGIN Task1 */
13   /* Infinite loop */
14   for(;;)
15   {
16       Debug_Printf("Task1 is running,will be in the ready state!\n");
17       //printf("Task1 is running,will be in the ready state!\n");
18       osDelay(50);
19   }
20   /* USER CODE END Task1 */
21 }
22 
23 /* Task2 function */
24 void Task2(void const * argument)
25 {
26   /* USER CODE BEGIN Task2 */
27   /* Infinite loop */
28   for(;;)
29   {
30       Debug_Printf("Task2 is running!\n");
31       //printf("Task2 is running!\n");
32       osDelay(50);
33   }
34   /* USER CODE END Task2 */
35 }

Printf print information directly output to protect the output of the following is not critical, sometimes print output incomplete information.

 

Use Debug_Printf print information is as follows:

 

Guess you like

Origin www.cnblogs.com/mickey-double/p/11430572.html