前言
打印 log 是调试程序的重要手段,下面我就来介绍一下,开发单片机应用程序时输出调试信息的几种方法:
- 软件仿真输出
- UART 输出
- SWO输出
- JLink-RTT输出
软件仿真输出
先表明我的观点,正常情况下,不建议使用纯软件的方式仿真单片机程序。
以 Keil 为例,将 printf 函数重定向到串口1,然后通过纯软件方式仿真,在 Keil 仿真界面的 UART#1 窗口中就可以看到 printf 函数打印的调试信息了:
纯软件仿真的好处是无需硬件,仅使用 IDE 即可,但缺点是很多项目无法直接进行软件仿真,且软件仿真结果不可靠。
UART 输出
串口输出调试信息这种方式,适用于正式发布运行的产品,无需仿真器,但是需要占用一个串口,打印调试信息时影响 MCU 的实时性。
SWO输出
SWO输出调试信息依赖内核调试组件中的仪器跟踪宏单元(ITM),但只有 Cortex-M3/M4/M7系列 MCU 支持 ITM,如果你的芯片是 Cortex-M0 或者其他ARM内核,则不支持ITM,无法通过 SWO 方式输出调试信息。
SWO输出调试信息这种方式,不影响 MCU 实时性,但必须使用硬件仿真器, ST-LINK、J-Link等带SWO口的调试器都支持。
使用 SWO 输出调试信息时,除了调试接口必须的接线外,还需要额外将单片机的 SWO 引脚与仿真器的 SWO 硬件连接起来,然后可以在 Keil 仿真界面的 Debug(printf)Viewer 窗口看到 SWO 打印的调试信息:
JLink-RTT输出
使用 J-Link 仿真器时,可以通过 RTT(Real Time Transfer)打印调试信息,不影响 MCU 实时性,效率很高,但是需要移植 RTT 相关代码。
下载安装好 J-Link 后,在 J-Link 目录的 Samples 文件夹内,有个名为 RTT 的文件夹,这个就是需要移植的 RTT 代码:
将 RTT 文件夹内的代码移植到你的工程中后,调用 SEGGER_RTT_printf( ) 函数即可打印调试信息,通过 JLinkRTTViewer 工具查看即可:
文章来源:https://www.toymoban.com/news/detail-727869.html
小结
上面介绍了几种常见的单片机调试信息输出方式,都有其各自的优缺点,但是从实时性和效率上来说,RTT > SWO > USRT。文章来源地址https://www.toymoban.com/news/detail-727869.html
输出方式 | 优点 | 缺点 |
---|---|---|
纯软件仿真 | 无需硬件 | 仿真结果不可靠,很多项目无法仿真 |
串口 | 无需仿真器 | 占用一个串口,打印调试信息时影响实时性 |
SWO | 实时性高 | 需要仿真器,仅支持Cortex-M3/M4/M7系列 MCU |
RTT | 实时性高 | 必须使用 J-Link 仿真器 |
到了这里,关于单片机打印调试信息的方法有哪些?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!