简介
在使用单片机时,很多时候会依赖串口进行 调试。项目使用EasyLog进行调试信息输出。 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目。 支持不同标签、级别输出,异步、缓存输出,在需要输出使用过程中的调试信息时,比起直接使用printf更方便。结合 串口终端软件(Putty、Termius、Tabby等)或者一些串口助手(推荐Vofa+),可以在终端输出 不同颜色的数据,或者使用一行代码 屏蔽哪一类输出,而不是不需要输出的时候需要手动去注释代码。


开发环境(工具):
- Clion-(arm-none-eabi-gcc): 2023
- Stm32HAL(CubeMX): 6.11.1
- CMake
1. 移植
下载代码,CubeMX配置和CMakeLists配置参考。zephyrhunt/Stm32H723_Debug: Debug Demo
1.1配置CubeMX
1.1.1 串口
使用串口进行交互,需要开启TX和RX DMA,开启串口中断
1.1.2 FreeRTOS
debug基于FreeRTOS,需要配置一些任务和信号量供debug中的easylog使用,配置选用CMSIS_V2(V1和V2对FreeRTOS封装程度不一样,使用同样的功能,调用的函数不同)
- 添加DefaultTask
位于debug.cc
- 添加信号量
elog_lock,elog_async,elog_dma_lock
位于EasyLog/port/elog_port.c
- 注意:如果软件卡死或者跑飞(可以通过调试查看),大概率是未能给任务分配足够的空间,需要配置任务大小,和堆栈大小
1.2 移植文件
项目使用CMakeLists.txt结构化管理,参考CLion中使用add_subdirectory()模块化管理Stm32项目-优快云博客,先构建一个基础的工程。软件支持arm-none-eabi-gcc(不同编译器涉及到管理工具与printf重定向),在Clion中使用。
关于Clion配置stm32环境参考STM32CubeMX projects | CLion Documentation(网上一些教程有些过时,Clion更新很快,建议参考官方教程进行配置)
-
复制Log文件到
User
目录,其中包含
-
User目录下添加
CMakeLists.txt
文件
project(User C CXX)
file(GLOB SOURCES "*.c" "*.cc" "*.cpp")
include_directories(Log)
add_library(User STATIC ${SOURCES})
# 添加需要链接的库
add_subdirectory(Log)
target_link_libraries(User Log) # User链接Log库
- 主目录
CMakeLists.txt
中添加,参考CLion中使用add_subdirectory()模块化管理Stm32项目-优快云博客
add_subdirectory(User)
target_link_libraries(${PROJECT_NAME}.elf User) # 主APP链接User库
2. 使用
源码中包含了对EasyLog的移植和简单调试功能的编写与测试。
- 在一个任务中调用
Debug::instance().Init();
初始化调试功能,并在任务循环中使用elog_raw()进行输出。
/*
* @brief Test任务
*/
void TestTask(void *argument) {
static const char *TAG = "IMU";
Debug::instance().Init();
static TickType_t xLastWakeTime = xTaskGetTickCount();
int xx = 0;
while (1) {
elog_raw("raw:%d\r\n", xx);
xx++;
vTaskDelayUntil(&xLastWakeTime, 1);
}
}
- 可以使用串口助手或者串口终端进行交互,串口终端类似于串口助手,可以显示串口的输出数据,不同的是,其数据发送是直接把按键值发送给单片机,推荐Tabby - 更现代的终端 — Tabby - a terminal for a more modern age
默认提供解析包括,例如使用按键h
查看帮助,使用s
可以设置变量,l
查看变量,使用t
可以使能elog_raw
的输出等…,(如果使用类似xcom,vofa这一类串口助手就是把字符发送给串口),具体内容和功能在debug.cc
中定义