• 注册 / 登录
  • 切换到窄版
  • 查看: 1394|回复: 0

    几种单片机打印调试信息的方法

    [复制链接]

    665

    主题

    679

    帖子

    6476

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    6476
    发表于 2023-4-21 13:29:11 | 显示全部楼层 |阅读模式

    路线栈欢迎您!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    前言

    打印 log 是调试程序的重要手段,下面我就来介绍一下,开发单片机应用程序时输出调试信息的几种方法:

    软件仿真输出、UART 输出、SWO输出、JLink-RTT输出

    软件仿真输出

    先表明我的观点,正常情况下,不建议使用纯软件的方式仿真单片机程序。

    以 Keil 为例,将 printf 函数重定向到串口1,然后通过纯软件方式仿真,在 Keil 仿真界面的 UART#1 窗口中就可以看到 printf 函数打印的调试信息了:

    几种单片机打印调试信息的方法 (1).png

    几种单片机打印调试信息的方法 (2).png

    纯软件仿真的好处是无需硬件,仅使用 IDE 即可,但缺点是很多项目无法直接进行软件仿真,且软件仿真结果不可靠。

    UART 输出

    串口输出调试信息这种方式,适用于正式发布运行的产品,无需仿真器,但是需要占用一个串口,打印调试信息时影响 MCU 的实时性。

    几种单片机打印调试信息的方法 (3).png

    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 打印的调试信息:

    几种单片机打印调试信息的方法 (4).png

    JLink-RTT输出

    使用 J-Link 仿真器时,可以通过 RTT(Real Time Transfer)打印调试信息,不影响 MCU 实时性,效率很高,但是需要移植 RTT 相关代码。

    下载安装好 J-Link 后,在 J-Link 目录的 Samples 文件夹内,有个名为 RTT 的文件夹,这个就是需要移植的 RTT 代码:

    几种单片机打印调试信息的方法 (5).png

    几种单片机打印调试信息的方法 (6).png

    将 RTT 文件夹内的代码移植到你的工程中后,调用 SEGGER_RTT_printf( ) 函数即可打印调试信息,通过 JLinkRTTViewer 工具查看即可:

    几种单片机打印调试信息的方法 (7).png

    小结

    上面介绍了几种常见的单片机调试信息输出方式,都有其各自的优缺点,但是从实时性和效率上来说,RTT > SWO > USRT。

    输出方式
    优点
    缺点
    纯软件仿真
    无需硬件
    仿真结果不可靠,很多项目无法仿真
    串口
    无需仿真器
    占用一个串口,打印调试信息时影响实时性
    SWO
    实时性高
    需要仿真器,仅支持Cortex-M3/M4/M7系列 MCU
    RTT
    实时性高
    必须使用 J-Link 仿真器

    END

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|路丝栈 ( 粤ICP备2021053448号 )

    GMT+8, 2024-9-17 03:28 , Processed in 0.050843 second(s), 22 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表