39 lines
759 B
C
39 lines
759 B
C
|
#include <stdio.h>
|
||
|
#include "co_log.h"
|
||
|
#include <stdarg.h>
|
||
|
#include "FreeRTOS.h"
|
||
|
#include "semphr.h"
|
||
|
|
||
|
|
||
|
static SemaphoreHandle_t printMutex;
|
||
|
|
||
|
void init_printf_mutex(void)
|
||
|
{
|
||
|
|
||
|
printMutex = xSemaphoreCreateMutex();
|
||
|
if (printMutex == NULL) {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//线程安全打印接口
|
||
|
void thread_safe_printf(const char *format, ...)
|
||
|
{
|
||
|
va_list args;
|
||
|
va_start(args, format);
|
||
|
if(xPortIsInsideInterrupt()) {
|
||
|
if (xSemaphoreTakeFromISR(printMutex, NULL)) {
|
||
|
vprintf(format, args);
|
||
|
xSemaphoreGiveFromISR(printMutex, NULL);
|
||
|
}
|
||
|
}else
|
||
|
{
|
||
|
if (xSemaphoreTake(printMutex, portMAX_DELAY)) {
|
||
|
vprintf(format, args);
|
||
|
xSemaphoreGive(printMutex);
|
||
|
}
|
||
|
}
|
||
|
va_end(args);
|
||
|
}
|
||
|
|