lift_indicator_suite/port/log/README.md

2.9 KiB
Raw Permalink Blame History

port/log — UART-адаптер логгера

Подключает utils/log к bsp_uart_host. Является эталонной реализацией транспортного адаптера — при добавлении нового транспорта (Flash, USB CDC) создаётся аналогичный каталог port/log_flash/ по той же схеме.


Архитектура

flowchart LR
    APP["LOG_I / LOG_D / …\nлюбой .c файл"]
    CORE["utils/log\nlog_write()"]
    ADAPTER["port_log_uart\nuart_write callback\nlog_get_timestamp_ms()"]
    BSP_U["bsp_uart_host\nbsp_uart_host_write()"]
    BSP_T["bsp_tick\nbsp_tick_get_ms()"]

    APP --> CORE --> ADAPTER
    ADAPTER --> BSP_U
    ADAPTER --> BSP_T

log_uart_init() делает две вещи:

  1. Регистрирует bsp_uart_host_write() как write callback через log_init().
  2. Предоставляет strong-реализацию weak-хука log_get_timestamp_ms()bsp_tick_get_ms().

API

void log_uart_init(void);

Предусловия: bsp_uart_host_init() и bsp_tick_init() уже вызваны.


Быстрый старт

#include "port/log_uart.h"
#include "log/log.h"

int main(void)
{
    board_hw_init();
    bsp_tick_init();
    bsp_uart_host_init(115200U);

    log_uart_init();        /* регистрирует транспорт и timestamp */

    LOG_I("BOOT", "Ready");
}

Интеграция с FreeRTOS (tft_app)

Для потокобезопасности создать мьютекс до log_uart_init():

log_mutex_init();   /* создать FreeRTOS-семафор */
log_uart_init();    /* зарегистрировать транспорт */

Реализация мьютекса — в firmware/tft_app/src/log_mutex.c:

#include "FreeRTOS.h"
#include "log/log.h"
#include "semphr.h"

static SemaphoreHandle_t s_log_mutex;

void log_mutex_init(void)   { s_log_mutex = xSemaphoreCreateMutex(); }
void log_mutex_lock(void)   { xSemaphoreTake(s_log_mutex, portMAX_DELAY); }
void log_mutex_unlock(void) { xSemaphoreGive(s_log_mutex); }

LOG_* нельзя вызывать из ISR — bsp_uart_host_write() блокирующий.


CMake

target_link_libraries(<target> PRIVATE port_log_uart)

Транзитивно подтягивает utils (содержит log.h и LOG_LEVEL), bsp_uart_host и bsp_tick.

Зависимости модуля:

Зависимость Тип Описание
utils PUBLIC log.h, LOG_LEVEL транзитивно
bsp_uart_host PUBLIC write callback
bsp_tick PUBLIC log_get_timestamp_ms()