stm32-freertos线程安全的打印函数
·
1、重定向(usart.c的USER CODE BEGIN 1下面)
#include <stdio.h>
int fputc(int ch, FILE *file)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
return ch;
}
2、使用互斥量保护printf输出
#include <stdio.h>
#include <stdarg.h> //必要的头文件
void safe_printf(const char *format, ...);//申明函数
void safe_printf(const char *format, ...) {
va_list args;
// 获取互斥量(等待最多100ms)
if (osMutexAcquire(printfMutexHandle, osWaitForever)== osOK) {
va_start(args, format);
vprintf(format, args); // 底层输出函数
va_end(args);
osMutexRelease(printfMutexHandle); // 释放互斥量
}
}
/*任务里实验一下*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
safe_printf("1");
//printf("1");
osDelay(1);
}
/* USER CODE END StartDefaultTask */
}
3、勾选微库编译

4、串口输出打印

更多推荐
所有评论(0)