当前位置: 首页 > news >正文

keil printf打印浮点_SEGGER_RTT打印调试

54cc1d98e72a9197efa9c6ba7ba5b89e.png

一、前言

在我们的嵌入式开发中,常常把printf重定向到MCU的串口外设,再配合上位机界面软件,通过打印调试信息的方式来调试我们的嵌入式软件。

此处,我们介绍另一种打印调试的方法——SEGGER 的RTTRTT全称是Real Time Transmit(实时传输),是Segger公司推出的,是配合J-link使用的一种调试手段。其框图如下:

1349d8334285a5d5dcc8ba552cb9f6ec.png

可见,我们的MCU通过J-Link,凭借RTT就可往电脑打印调试信息,电脑端这边用的是J-LINK 的小软件 RTT Viewer (不能是别的软件哦)。这样,我们就可以把MCU的串口资源释放出来了,特别对于一些串口资源不那么充足的MCU来说就可以省出一个串口去与其它外围芯片进行串口通讯。

二、SEGGER_RTT的使用

所需准备,J-LinkSEGGER_RTT源码,可在本公众号聊天界面回复关键词:RTT,即可获取下载链接。下面演示在Keil-MDK环境下使用SEGGER_RTT

1、安装J-Link驱动

fb05cecf320dc2abad84471fdbf4ff06.png

安装完之后就可在看到如图所示的J-Link RTT Viewer V6.44b,我们待会要把调试信息传输到这个软件上。

2、SEGGER_RTT的收发测试

(1)把SEGGER_RTT_V640添加到我们的工程文件夹中

901cc2ac5f214bce49bd5e828395ecb1.png

SEGGER_RTT_V640中的内容如下:

52fa08bd97eedf30ed7603f200dadaf2.png

(2)把SEGGER_RTT_V640下的RTT下的所有文件添加到我们的工程中

a5221f81c758ae0de0fd646c1ae27a33.png

(3)添加文件路径

87fb06f4cc47f83df27a7dcb75cdfa76.png

(4)在main.c中添加如下测试代码

int main(void)
{   
    /* 今天是2019-08-15 */
    #define YEAR   2019
    #define MONTH  8
    #define DAY    15
    
    int GetKey;
    
    /* 配置通道0,上行配置(STM32->RTT Viewer软件) */
    SEGGER_RTT_ConfigUpBuffer(0, "RTTUP", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
    
    /* 配置通道0,下行配置(RTT Viewer软件->STM32) */   
    SEGGER_RTT_ConfigDownBuffer(0, "RTTDOWN", NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP);
    
    while (1)
    {
        /* 收发测试 */
        if (SEGGER_RTT_HasKey())            /* 判断接收缓冲区中是否有数据 */
        {
            GetKey = SEGGER_RTT_GetKey();   /* 从接受缓冲区中取出一个字符 */
            SEGGER_RTT_SetTerminal(1);
            SEGGER_RTT_printf(0, "GetKey = %crnHello world! Today is %.4d-%.2d-%.2d", GetKey, YEAR, MONTH, DAY);
        }
    }
    
    return 0;
}

需要注意的是:记得添加头文件SEGGER_RTT.h,范例工程可在聊天界面回复关键词RTT进行获取。

(5)编译下载到flash中,并启动RTT Viewer软件

4d75130d1e51d0c933e0bdd98e1f9861.png

f89c9ba669231a7146b86c256aaf9e73.png

42204d1acf351614cebeaf672755394c.png

这个测试程序是对SEGGER_RTT进行收发测试,其中SEGGER_RTT_printf与我们平时用的printf差不多。

三、最后

SEGGER_RTT基本上可以替换掉我们的串口打印调试,关于SEGGER_RTT还有其他可以学习的地方,比如输出颜色设置、多任务调度等,有需要的朋友可以自己进行学习使用,推荐资料:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86177&fromuid=58

相关文章:

  • 品德+创意+执行力=企业的不断壮大
  • python解析库 爬虫_python 爬虫(二)- 解析库 的简单使用
  • 做市场的同僚应该留意的16个字
  • 威联通_[Zheli体验] 威联通入门折腾小记
  • python随机生成50个整数奇数位降序_15个经典函数公式,易学易用,收藏备用
  • Web2.0为互联网行业带来的又一次变革
  • 和画意思相近的字_王雪涛:画花鸟,这几条要切记!(附高清绝美花鸟60幅)...
  • Windows live服务终于来了!
  • 双显示器 启动黑屏 黑苹果_黑苹果装机黑屏问题解决方案5500xt
  • oracle查询bolb字段_如何在Oracle SQL Developer中查看Blob数据
  • 打造全新的Windows Live™ Spaces
  • cdh sqoop 配置_Navigator 配置定期删除管理元数据
  • perl 新得
  • token干什么用_什么是TOKEN?Token小号的理解运用,拼多多,知乎,快手,抖音的Token是什么意思...
  • GCC for Win32 开发环境介绍(3)
  • 【comparator, comparable】小总结
  • 【刷算法】从上往下打印二叉树
  • 2017 年终总结 —— 在路上
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • JavaScript中的对象个人分享
  • java取消线程实例
  • Laravel Mix运行时关于es2015报错解决方案
  • Python实现BT种子转化为磁力链接【实战】
  • spring + angular 实现导出excel
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • zookeeper系列(七)实战分布式命名服务
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 一些关于Rust在2019年的思考
  • 原生 js 实现移动端 Touch 滑动反弹
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​渐进式Web应用PWA的未来
  • #Java第九次作业--输入输出流和文件操作
  • #Spring-boot高级
  • (2)Java 简介
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二)c52学习之旅-简单了解单片机
  • (分布式缓存)Redis哨兵
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (力扣题库)跳跃游戏II(c++)
  • (一)SpringBoot3---尚硅谷总结
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)visual stdio 书签功能介绍
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .Net MVC4 上传大文件,并保存表单
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .Net 应用中使用dot trace进行性能诊断
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net经典笔试题
  • .net连接MySQL的方法
  • .NET下ASPX编程的几个小问题
  • @GetMapping和@RequestMapping的区别