0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于一种高效printf打印方式

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-02-29 16:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1写在前面

SWO:Serial Wire Output,串行线输出

RTT:Real Time Transfer,实时传输

前面SWO文章,实现原理是通过MCU的SWO引脚输出信息(到显示终端SWV)。

而本文讲述的RTT不需要通过额外SWO引脚,即可实现printf输出,而且性能(耗时)远高于SWO。

2关于RTT

SEGGER实时传输(RTT)是一种在嵌入式应用中实现交互式用户I/O的技术。

它结合了SWO和半主机( semihosting)的优点,具有很高的性能。

使用RTT,可以从目标微控制器输出信息,并以非常高的速度向应用程序发送输入,而不会影响目标的实时性。

Cortex - M0不支持SWO,而本文讲述的RTT则支持Cortex - M0,文末提供STM32F0工程。

3关于J-Link RTT Viewer

J-Link RTT Viewer是在调试主机上使用RTT功能的Windows GUI应用程序。

RTT Viewer可以独立使用,打开自己与J-Link的连接,并与正在运行的调试会话目标或并行,连接到它并使用现有的J-Link连接。

RTT Viewer支持RTT的主要功能:

·通道0上的终端输出

·将文本输入发送到通道0

·最多16个虚拟终端,只有一个目标通道

·控制文本输出:彩色文本,擦除控制台

·在通道1上记录数据

·

·

本文主要结合J-Link RTT Viewer讲述,当然支持RTT的还有J-Link RTT Client 和J-Link RTT Logger。

更多相关介绍,可以参看:

https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer

(公号不支持外链接,请复制链接到浏览器打开)

4获取RTT源码

我们需要在工程中添加RTT源码,同时需要J-Link RTT Viewer查看器支持。

J-Link / J-Trace下载地址(Windows版本):

https://www.segger.com/downloads/jlink/JLink_Windows.exe

安装之后,在安装目录下包含RTT源码:

C:Program Files (x86)SEGGERJLinkSamplesRTT

解压SEGGER_RTT_V***.zip之后,复制整个RTT目录源码到你工程。

提示:

解压之后,只需复制RTT目录就行。

4.1 添加RTT到工程

添加源码文件到工程主要有两个步骤:1.添加源码文件到工程。 2.添加文件路径。

这里不讲述具体添加过程,Keil 和 IAR之前有讲述,请参看我的文章:

Keil新建基础软件工程

IAR新建基础软件工程

当然,我下面有提供添加好的源码工程。

4.2 应用程序

调用RTT的打印,和常规的printf类似。

添加头文件:#include "SEGGER_RTT.h"

再调用SEGGER_RTT_printf函数打印输出:

这里SEGGER_RTT_printf和print不同的是:前面多了一个“终端号”参数。(我们使用终端0)

5RTT Viewer配置、输出

和前面讲述的SWV查看器类似,配置相关信息即可输出。

安装目录:C:Program Files (x86)SEGGERJLink

下载程序到MCU,连接J-Link,打开安装目录下的J-Link RTT Viewer,配置参数:

输出效果:

6下载

为方便大家理解,提供源码工程下载,参考代码:

STM32F051(HAL)_JLink-RTT

STM32F103(HAL)_JLink-RTT

百度网盘:

https://pan.baidu.com/s/1aYBuHtOgtLqLvj6SsMYlQA

提取码:nbd3

提示:

1.公众号不支持外链接,请复制链接到浏览器打开。

2.源码仅供个人学习参考,不一定适用于实际项目。

3.若链接失效,请关注公众号,回复『printf系列教程』获取最新链接。

7

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串行
    +关注

    关注

    0

    文章

    256

    浏览量

    35203
  • SWOT
    +关注

    关注

    0

    文章

    4

    浏览量

    8138
  • Printf
    +关注

    关注

    0

    文章

    84

    浏览量

    14629
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机使用printf打印编译出错的原因?

    单片机使用printf打印编译出错,有哪些情况?
    发表于 11-21 06:02

    iSUN3D即将推出单组分弹性树脂3D打印解决方案!

    iSUN3D将在Formnext 2025发布单组分弹性树脂3D打印方案,覆盖设计到交付全流程,解决柔弹性制造成本与效率痛点,现场可体验高速打印与限量礼品。
    的头像 发表于 11-17 11:45 273次阅读
    iSUN3D即将推出单组分弹性树脂3D<b class='flag-5'>打印</b>解决方案!

    求助,关于C代码中的printf打印的疑问求解

    在使用E203 testbench执行附带的benchmark测试用例时候,得到如下打印信息: CPU验证小白枚,有个问题不是很理解:黄色框框内的字符看起来应该是C代码中的printf语句
    发表于 11-10 07:54

    芯未来|数字化车场国产彩色激光打印机如何实现高效输出与智能管控

    在部队数字化车场的运作中,值班室是信息流转与指令下达的关键节点。无论是车辆调度单、装备检查报告还是日常办公文件,都需要一种高效、可靠且绝对安全的输出设备。 芯未来的这款专为严苛环境设计的国产A4
    的头像 发表于 10-31 16:21 426次阅读

    【RA4L1-SENSOR】+ RA4L1-SENSOR开发版之使用Jlink的RTT打印功能代替串口

    篇帖子中我已经实现了板子上的串口USART9进行输出打印,这篇帖子我采用另外一种串口打印来实现,这是瑞萨官网实现的最主要打印调试手段,那
    发表于 06-09 09:03

    扫码枪直连打印机扫产品上的条码二维码,自动打印对应的条码标签

    在现代企业的生产、仓储、物流等环节中,条码标签的打印与使用是项极为常见却又至关重要的工作。传统的依靠电脑连接条码打印机的打印方式,在面对大规模、高频次的
    的头像 发表于 06-04 14:08 758次阅读
    扫码枪直连<b class='flag-5'>打印</b>机扫产品上的条码二维码,自动<b class='flag-5'>打印</b>对应的条码标签

    S32K312通过UART口打印系统信息,是否有使用Printf () 函数打印信息的Demo例程?

    S32K312通过UART口打印系统信息,是否有使用Printf () 函数打印信息的Demo例程?
    发表于 04-11 07:21

    扫码自动打印体化系统:直接扫码打印条码标签,扫打印

    在当今这个快节奏的生产、物流与零售环境中,信息的高效管理成为了企业提升竞争力的关键。传统的条码标签打印方式依赖于电脑与条码打印机的连接,这模式在面对大规模、高频次的
    的头像 发表于 04-09 15:57 1029次阅读
    扫码自动<b class='flag-5'>打印</b><b class='flag-5'>一</b>体化系统:直接扫码<b class='flag-5'>打印</b>条码标签,扫<b class='flag-5'>一</b>个<b class='flag-5'>打印</b><b class='flag-5'>一</b>个

    为何工程塑料不适合打印圆弧形模型?

    打印方式,那每层之间必然会存在定的衔接痕迹。 正因如此,在XY轴方向上遇到弧面或小角度平面时,其层纹会变得异常明显。从 JLC3D 小编实际打印的圆弧形模型(PLA材料)中可以清
    发表于 04-07 15:31

    PRINTF函数无法打印出浮点数内容是为什么?

    1、MCXN947低功耗adc,历程中使用官方提供的PRINTF无法打印出浮点数内容。 2、同样在mcuxpresso ide 也不可以打印浮点数,这是为什么呢? 3、使用的历程是lpadc历程。
    发表于 03-20 08:06

    高电压放大器在EHD电流体动力喷墨打印系统中的应用

    随着科技的飞速发展,喷墨打印技术已经成为现代生产生活中不可或缺的部分。特别是EHD电流体动力喷墨打印系统,以其独特的打印方式,在印刷行业中占据了重要的地位。而在这种
    的头像 发表于 02-21 11:41 763次阅读
    高电压放大器在EHD电流体动力喷墨<b class='flag-5'>打印</b>系统中的应用

    【RA-Eco-RA2L1-48PIN-V1.0开发板试用】——使用串口输出打印printf实现

    篇我讲解了使用JINK RTT来实现串口输出打印printf函数功能, 本次测评我来讲解另外一种串口打印方式,直接使用板载的串口功能来
    发表于 01-23 12:20

    一种新型高效率的服务器电源系统

    一种新型高效率的服务器电源系统
    发表于 12-19 16:45 1次下载

    stdio.h实现了printf函数?

    里面实现了 printf。 实际上并不是,这里就涉及了头文件和库的区别。 头文件般存放大家都要用的东西,比如函数的声明,结构体的声明,命名新的类型等等。 stdio.h 头文件,里面也只是声明了
    的头像 发表于 12-18 10:28 869次阅读

    【敏矽微ME32G070开发板免费体验】使用JLINK的RTT功能实现类似串口printf打印功能

    收到这款敏矽微ME32G070开发板后,我发现我的这款板子是坏的,串口打印部分不能打印,我先烧录了demo文件夹里的串口打印printf函数 打开串口助手 却没有任何数据,我用万用
    发表于 12-15 20:30