stm32h743_player/User/tasks/task_elog.c
2024-03-03 22:46:44 +08:00

61 lines
1.8 KiB
C

#include "elog.h"
#include <stdio.h>
#include "main.h"
#include "task_main.h"
extern SemaphoreHandle_t elog_async;
extern SemaphoreHandle_t elog_dma_lock;
void elog_port_output(const char *log, size_t size);
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
BaseType_t task_woken = pdFALSE;
if (huart->Instance == huart1.Instance) {
xSemaphoreGiveFromISR(elog_dma_lock, &task_woken);
}
portYIELD_FROM_ISR(task_woken);
}
void task_elog_entry(void const * argument)
{
#ifdef ELOG_ASYNC_LINE_OUTPUT
static char __attribute__((section(".ram_ahb"))) poll_get_buf[ELOG_LINE_BUF_SIZE - 4];
#else
static char __attribute__((section(".ram_ahb"))) poll_get_buf[ELOG_ASYNC_OUTPUT_BUF_SIZE - 4];
#endif
printf("\033[2J"); //清屏
fflush(stdout);
elog_init();
elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME);
elog_start();
task_main_create(NULL); //进入用户主任务
while (1) {
/* waiting log */
xSemaphoreTake(elog_async, portMAX_DELAY);
/* polling gets and outputs the log */
while (1) {
#ifdef ELOG_ASYNC_LINE_OUTPUT
size_t get_log_size = elog_async_get_line_log(poll_get_buf, sizeof(poll_get_buf));
#else
size_t get_log_size = elog_async_get_log(poll_get_buf, sizeof(poll_get_buf));
#endif
if (get_log_size) {
elog_port_output(poll_get_buf, get_log_size);
} else {
break;
}
}
}
}