目录
调试工具
日志打印
1. Debug日志打印
2. RTT日志打印
3. 串口日志打印
总结
嵌入式系统的调试是一个复杂且关键的过程,涉及多种工具和技术的综合应用。以下是对嵌入式常见调试工具、日志打印方式的全面报告,包括Debug、RTT(Real-Time Terminal)和串口日志打印。
调试工具
- Debug调试器
- 功能:通过连接嵌入式设备和计算机,允许开发者单步执行代码、查看变量值、设置断点等,以识别和解决程序中的错误。
- 示例:J-Link调试器,用于与嵌入式开发板建立调试连接,并通过RTT进行数据传输。
- SEGGER J-Link软件
- 功能:用于设置和配置J-Link调试器的软件工具,提供图形化界面,简化调试过程。
- 网络调试工具
- 功能:如网络调试助手和Wireshark,用于捕获和分析网络数据,帮助开发者诊断网络相关问题。
- 远程调试工具
- 功能:如向日葵远程调试,允许开发者远程连接到客户的设备,进行实时调试和故障排除。
日志打印
1. Debug日志打印
- 方式:通过Debug调试器,在开发环境中直接查看和打印程序执行过程中的调试信息。
- 特点:实时性强,信息详细,但通常需要连接调试器才能查看。
2. RTT日志打印
- 功能:RTT是一种轻量级的调试库,通过串口连接嵌入式设备和主机端,实现实时的日志输出和输入,使用JLink调试器, 可以通过RTT(Real-Time Transfer)方式输出log, 不增加引脚占用而且速度很快.。
- 实现:
- 在项目中配置RTT功能,并添加RTT库的引用和初始化代码。
- 在源代码中调用RTT的打印函数,将数据发送到主机端。
- 特点:低资源占用,高效率,适合嵌入式系统调试。
- 引用
- 首先需要再项目工程引入RTT文件,其中SEGGER_RTT_printf.c和SEGGER_RTT.c
- 日志打印
- RTT可以有多个输入输出通道,最大通道数可以在Conf头文件里配置,其中channel0是默认通道。
- 基本上
SEGGER_RTT_printf()
这条API就够用了, 比如以往通道0输出字符串:
- 日志打印方式
- 日志查看方式
- JLink工具包里提供了3种客户端: RTTClient/RTTViewer/RTTLogger.
- J-Link RTT Client客户端方式
RTTClient最常用也很方便用, 它会不断地尝试连接到Debugger开放的19021端口, 比如开启JLinkGDBServer或者Keil的Debugger之后它就会自动连上去, 显示channel0的数据:
配置好GDB
窗口会自动连接,可以进行日志输出
RTTLogger就是个日志记录工具, 能单独连接到JLink, 把指定通道输出的数据输出到一个文件里
RTTViewer只在windows下有, 它能直接连接Jlink或者像RTTClient一样加入到现有的会话(Session)中, 显示各个通道的数据.
3. 串口日志打印
- 方式:通过UART串口将调试和日志信息输出到外部设备(如计算机、串口终端等)。
- 实现:
- 在嵌入式设备上配置UART串口参数(如波特率、数据位、停止位等)。
- 在源代码中使用标准库函数(如printf)或微库函数,将数据发送到UART串口。
- 特点:简单易用,通用性强,但可能受到串口资源限制。
总结
嵌入式系统的调试和日志打印涉及多种工具和技术的综合应用。Debug调试器提供了强大的调试功能,但通常需要连接调试器才能查看信息;RTT日志打印具有低资源占用和高效率的特点,适合嵌入式系统调试;串口日志打印简单易用,通用性强,但可能受到串口资源限制。在实际应用中,开发者可以根据项目需求和硬件资源选择合适的调试工具和日志打印方式,码哥比较喜欢用RTT进行日常调试打印,无需占用太多资源,输出也方便,大家对RTT感兴趣的可,在公众号回复“RTT” 下载资源包