FreeRTOS---互斥量在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 va_end(v_args); 13 14 /* 互斥信号量 */ 15 osMutexWait(Mutex_printfHandle,osWaitForever); 16 printf("%s", buf_str); 17 osMutexRelease(Mutex_printfHandle); 18 }
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输出不做临界保护输出的打印信息如下,有时出现输出打印信息不完整。
使用Debug_Printf打印信息如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)