完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`01RTT Viewerd简介 SEGGER的实时传输(Real time Transfer, RTT)是嵌入式应用中用户I/O交互的一种新技术。J-Link RTT Viewer是在调试主机上使用RTT功能的Windows GUI应用程序,它结合了SWO和半主机semihosting的优点,具有很高的性能。使用RTT,可以从目标微控制器输出信息,并以非常高的速度向应用程序发送输入,而不会影响目标的实时性。 在没有多余串口printf输出的情况下,而且需要输出少量的Debug状态信息时,可以使用SEGGER-RTT开发调试。 1.1 特性与目标应用程序进行双向通信
1.2 RTT Viewer主要功能 通道0上的终端输出
02 资料准备 2.1 下载并安装 下载地址: https://www.segger.com/downloads/jlink/#JLinkSoftwareAndDocumentationPack 全家桶即安装J-Flash相关的软件,相关的下载以及安装方式就不做过多的介绍。 2.2 获取RTT Viewer源码 安装完成J-Link全家桶以后,在电脑安装路径下的C:Program Files (x86)SEGGERJLinkSamplesRTT文件夹下面存放的就是RTT_Viewer的源代码。将此文件夹下面的SEGGER_RTT_Vxxxx.zip文件解压到我们的工程文件夹下面。 工程配置 3.1 RTT Viewer加入Keil工程 在模板工程中将文件夹下面的SEGGER_RTT.c,SEGGER_RTT_printf.c加入到我们的工程文件中,并包含头文件SEGGER_RTT.h,SEGGER_RTT_printf.h相关路径。 #include "SEGGER_RTT_Conf.h"并在main函数中加入SEGGER_RTT_ConfigUpBuffer函数来初始化RTT Viewer。 SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP); 至此RTT Viewer加入到工程并进行相关的初始化已经完成。 3.2 RTT Viewer log打印 调用LOG打印函数SEGGER_RTT_printf打印上电LOG: SEGGER_RTT_printf(0, "SEGGER RTT Sample. Uptime: %.10dms.", /*OS_Time*/ 890912); // Formatted output on channel 0: SEGGER RTT Sample. Uptime: 890912ms.连接上位机并在上位机端查看log打印是否成功。 控制台发送指令到MCU RTT_Viewer还可以作为控制台发送指令到MCU,具体调用的函数为SEGGER_RTT_WaitKey();下面来做一个测试,RTT_Viewer上位机发送一个数据到MCU。具体的测试代码如下,将下面的代码加入主函数的初始化后面即可。 do { c = SEGGER_RTT_WaitKey();//获取RTT_Viewer上位机发送的数据 } while (c != 'c'); MCU控制上位机打印彩色log MCU控制RTT_Viewer打印彩色log可以调用SEGGER_RTT_TerminalOut函数来实现,以下为具体的实现方式。 SEGGER_RTT_WriteString(0, "Hello World from your target. "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BLACK"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_RED"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_GREEN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_YELLOW"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BLUE"Counter overflow! "); SEGGER_RTT_TerminalOut(1,RTT_CTRL_TEXT_MAGENTA"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_CYAN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_WHITE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_RED"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_GREEN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_YELLOW"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_BLUE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_MAGENTA"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_CYAN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BRIGHT_WHITE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_TEXT_BLUE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BLACK"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_RED"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_GREEN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_YELLOW"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BLUE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_MAGENTA"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_CYAN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_WHITE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_BLACK"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_RED"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_GREEN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_YELLOW"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_BLUE"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_MAGENTA"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_CYAN"Counter overflow! "); SEGGER_RTT_TerminalOut(1, RTT_CTRL_BG_BRIGHT_WHITE"Counter overflow! "); RTT Viewer打印浮点数 在SEGGER_RTT.c文件中加入如下函数: /********************************************************************* * * rtt_printf() * * Function description * print a formatted string using RTT and standard library formatting. **********************************************************************/ int rtt_printf(const char *fmt,...) { int n; char aBuffer[256]; //根据应用需求调整大小 va_list args; va_start (args, fmt); n = vsnprintf(aBuffer, sizeof(aBuffer), fmt, args); if (n > (int)sizeof(aBuffer)) { SEGGER_RTT_Write(0, aBuffer, sizeof(aBuffer)); } else if (n > 0) { SEGGER_RTT_Write(0, aBuffer, n); } va_end(args); return n; } 在主函数的循环中加入如下测试代码: Cnt++; SEGGER_RTT_printf(0, "%sCounter: %s%d ", RTT_CTRL_BG_CYAN, RTT_CTRL_TEXT_BRIGHT_GREEN, Cnt); fa += 0.0001f; fb -= 0.0002f; rtt_printf("floating test: fa = %f, fb = %f ", fa, fb);//此函数用来打印浮点 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2252个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11816 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5972 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
11114 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4593 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4325 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
1265浏览 1评论
844浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:03 , Processed in 0.490911 second(s), Total 37, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号