我想那些做纯软件开发的,比如java,python,html开发的,或许不会想到在嵌入式开发中,想要直接看调试信息,打印日志都需要通过别的手段,比如你开发一个电子称,调试过程中你明显不能把日志打印在电子称上面
通过串口打印
在MCU里面复用一路串口,将printf重定向到串口,通过串口转USB设备,我是在淘宝上面用5块钱买了个便宜的,如果想要求稳可以买那种带隔离的,在电脑上面通过串口助手来查看日志,这是最简单直接也是最常用的。
其实如果使用的jlink, v9 v10及以上的仿真器驱动安装后会在设备管理器看到一个CDC串口,可以在Jlink commander 里面输入VCOM ENABLE命令来开启串口功能
RTT打印
需要用到jlnk,这种方式非常方便,只需要把RTT的源码添加到工程,然后用SEGGER_RTT_printf(0, “%s\n”, “test”);就能打印。是我比较喜欢的方式,
RTT的工作原理大致就是在内存里面创建一个RTT控制块RTT Control Block,即SEGGER_RTT_CB结构体。这个结构体里面存放了若干个上行通道和下行通道,每个通道都有一个数据buffer以及读写指针,构成了数据队列。向RTT控制块里面的任意一个上行通道的数据队列中写入log信息,然后JLINK能够通过读写RAM内容,获取到队列的数据buffer和写指针的内容,并更新读指针
如果你使用的云途的MCU,使用RTT只需要打开这个勾选就OK了
Event Recoder调试组件打印
需要先安装一个EVR组件(其实这个组建非常强大,强烈推荐!我这里只介绍其中的打印功能)
debug的trace页面也需要做对应的配置
需要注意要把自己其他的重定向给注释掉
测试效果:
其他的日志库(EasyLogger)
https://github.com/armink/EasyLogger
超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,移植起来也非常方便,支持自定义输出方式(例如:终端、文件、数据库、串口、485、Flash…)功能非常丰富。