嵌入式开发笔记——调试组件SEGGER_RTT

发布者:知识的海洋最新更新时间:2025-02-28 来源: cnblogs关键字:嵌入式  调试组件 手机看文章 扫描二维码
随时随地手机看文章

一、前言

嵌入式开发过程中,经常会通过打印输出一些调试信息来调试参数、查找问题等,通常我的做法都是使用芯片串口硬件设备配合串口助手软件来进行调试。但是这次项目的PCB硬件设计并未预留串口调试接口,所以想使用串口调试就不方便了。经过查找资料发现Segger 提供了一种非常方便的调试方式——自家的J-Link硬件配合J-Link RTT Viewer软件进行信息输入输出调试。

二、组件添加

要使用该调试组件,需要添加Segger提供的SEGGER_RTT组件代码,该代码位于J-Link软件安装目录下,而且在用户手册中提供了详细的说明。

组件源码位置:

用户手册位置:

在手册的16章节对RTT组件进行了说明:

将组件源码复制到工程目录下,工程中添加相关文件及包含路径:

最后在需要使用打印调试信息的文件中包含#include 'SEGGER_RTT.h'头文件就可以使用该组件了。


三、组件应用

关于组件提供的各API函数在手册中都有相应的说明。举例应用如下:

输出测试:

int a = 3;

SEGGER_RTT_TerminalOut(0,RTT_CTRL_BG_BLACK''RTT_CTRL_TEXT_BRIGHT_GREEN'SEGGER_RTT_TerminalOut 0rn');

SEGGER_RTT_TerminalOut(1,RTT_CTRL_BG_BLUE''RTT_CTRL_TEXT_BRIGHT_YELLOW'SEGGER_RTT_TerminalOut 1rn');

SEGGER_RTT_SetTerminal(2);

SEGGER_RTT_printf(0,RTT_CTRL_BG_WHITE''RTT_CTRL_TEXT_BRIGHT_BLACK'SEGGER_RTT_printf 2rn');

SEGGER_RTT_SetTerminal(3);

SEGGER_RTT_printf(0,'SEGGER_RTT_printf %drn', a);



打开J-Link RTT Viewer软件

RTT Viewer打印结果如下:

输入测试:

int a;while(1)
{    if ((a = SEGGER_RTT_WaitKey()) > 0) 
    {
        SEGGER_RTT_SetTerminal(0);
        SEGGER_RTT_printf(0, 'SEGGER_RTT_GetKey = %crn', a);
    }
}

RTT Viewer打印结果如下:

四、扩展应用

经过上面对SEGGER_RTT的使用,发现其确实非常的方便,大多数调试都能够替代串口调试实现了,但是SEGGER_RTT_printf()函数无法打印浮点数。手册中对该函数列出了支持的转换说明符如下:

Conversion specifierMeaning
cPrint the argument as one char
dPrint the argument as a signed integer
uPrint the argument as an unsigned integer
xPrint the argument as an hexadecimal integer
sPrint the string pointed to by the argument
pPrint the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.)

其中并没有浮点数f选项。但是可以使用SEGGER_RTT输出函数自己修改一个printf函数,这样就可以使用完整的printf函数了。


添加自己修改的printf函数如下:


/*********************************************************************

*

*       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;

}

接下来测试浮点数打印:


double fa = 0.1f;double fb = 2.0f;while(1)

{

    fa += 0.0001f;

    fb -= 0.0002f;

    rtt_printf('floating test:tfa = %f, fb = %frn', fa, fb);

    delay(0x0fffffff);



关键字:嵌入式  调试组件 引用地址:嵌入式开发笔记——调试组件SEGGER_RTT

上一篇:ThreadX——IPC应用之消息队列
下一篇:ThreadX——IPC应用之信号量

推荐阅读最新更新时间:2026-03-20 11:34

Event Recoder调试组件在stm32上的使用
本文目标:Event_Recoder调试组件在stm32上的使用 按照本文的描述,应该可以在你所处的硬件上跑通代码。 先决条件:装有编译和集成的开发环境,比如:Keil uVision5。 板子硬件要求:无,属于调试功能。 起源 因为做产品开发,设计东西有时候考虑得多,mcu的并没有多余的串口供使用调试,在调试一些初期进行验证时,必要的调试的打印信息是需要的。 Event Recoder调试组件简介 嵌入式的Event_Recoder调试组件是一种可以在MDK开发环境下使用的高级调试工具,它可以记录软件运行的一些标志信息,并以图形化的形式显示出来。它可以帮助你了解和分析内部操作,支持Keil RTX操作系统调试以及MDK自带的
[单片机]
Event Recoder<font color='red'>调试</font><font color='red'>组件</font>在stm32上的使用
STM32 USMART调试组件
1、USMART是由ALIENTEK开发的一个灵巧的串口调试交互组件,通过它你可以通过串口助手调用程序里的任何函数,并执行。因此,你可以随意更改函数的输入参数(支持数字(10/16进制)、字符串、函数入口地址等作为参数),单个函数最多支持10个输入参数,并支持函数返回值显示。 2、USMART的特点 1.可以调用绝大部分用户直接编写的函数。 2.资源占用极少(最少情况:FLASH:4K; SRAM:72B)。 3.支持参数类型多(数字(包含10/16进制)、字符串、函数指针等)。 4.支持函数返回值显示。 5.支持参数及返回值格式设置。 6.支持函数执行时间计算。 7.使用方便。
[单片机]
35. USMART调试组件的实验
一。USMART调试组件的基本过程 USMART 是由 ALIENTEK 开发的一个灵巧的串口调试互交组件,通过它你可以通过串口助手调用程序里面的任何函数,并执行。 1. 什么是USMART 可以通过串口给单片机发送命令,单片机收到命令后调用相应的函数,这样可以加快程序的调试进度,更加方便。 2. USMART的特点 需要用USMART调试的函数需要在usmart_config.c中注册。 例: //函数名列表初始化(用户自己添加) //用户直接在这里输入要执行的函数名及其查找串 struct _m_usmart_nametab usmart_nametab = { #if USMART_USE_W
[单片机]
35. USMART<font color='red'>调试</font><font color='red'>组件</font>的实验
STM32F103学习笔记 (十一) USMART调试组件
usmart组件简直就是调试神奇,利用它,则只需要在串口调试助手里面输入函数及参数,然后直接串口发送给单片机,就执行了一次参数调整,不满意的话,你在串口调试助手修改参数在发送就可以了,直到你满意为止。 支持的类型有: 10 或者 16 进制数字、字符串指针(如果该参数是用作参数返回的话,可能会有问题!)、函数指针等。 使用USMART 调用的函数,必须将文件添加到usmart_config.c: 只要把函数所在头文件添加进来,并把函数名按上图所示的方,增加即可。 主函数很简单,就是在屏幕上显示一些内容: int main(void) { delay_init(); //延时函数初始化 NVIC_C
[单片机]
STM32F103学习笔记 (十一) USMART<font color='red'>调试</font><font color='red'>组件</font>
剑指工业与物理AI:AMD锐龙AI嵌入式P100系列高端型号重磅登场
AI、生成式AI正以前所未有的态势向边缘设备迁移,去APP化、本地化是当下AI发展的关键词,代理式AI、物理AI也在最近变得更加火热。从AIoT的初步探索,迈向真正意义上的边缘AI时代,这一转变让嵌入式行业发生着天翻地覆的巨变,也为嵌入式行业带来巨大的机遇。 提起AMD,很多人的往往会先想起来它的PC和服务器业务,事实上,嵌入式业务和边缘AI也是AMD的重要一环,也可以说是AMD业务的第三大支柱。 目前,在嵌入式领域,AMD拥有两条关键产品线:一个是AMD锐龙AI嵌入式处理器(Ryzen AI Embedded),另一个则是AMD EPYC嵌入式处理器。 1月,AMD推出4~6核的锐龙AI嵌入式P100系列,面向沉浸式
[嵌入式]
剑指工业与物理AI:AMD锐龙AI<font color='red'>嵌入式</font>P100系列高端型号重磅登场
摩尔斯微电子在2026年德国嵌入式展推出“设计合作伙伴计划”
计划将加速Wi-Fi HaLow技术的普及与产品上市进程,推动Wi-Fi HaLow生态系统规模化发展 中国北京,德国纽伦堡嵌入式展 - 2026年3月10日 - 全球领先的Wi-Fi HaLow芯片供应商摩尔斯微电子,今日正式推出“摩尔斯微电子设计合作伙伴计划”。这一面向全球开发者与设计公司的创新倡议,旨在全面加速量产级Wi-Fi HaLow解决方案的商业化进程。 随着行业正式迈入物联网2.0时代,解决方案必须具备安全性、远距离连接能力、及可直接集成至现有IP网络的基础设施就绪型连接——无需网关、协议转换和不必要的复杂设计。 “摩尔斯微电子合作伙伴计划”正式确立了摩尔斯微电子与经过严格筛选的设计公司、系统集成商及开发
[嵌入式]
AMD 扩展锐龙 AI 嵌入式处理器产品组合,为工业与 AI 边缘解决方案提供高效 AI 计算能力
AMD 扩展锐龙 AI 嵌入式处理器产品组合,为工业与 AI 边缘解决方案提供可扩展的高效 AI 计算能力 新款处理器能在相同的紧凑封装尺寸下,以至多 2 倍的 CPU 核心数量和更高的 AI 吞吐量实现下一代工业和机器人解决方案。 从工业自动化到移动机器人和医学成像,各类嵌入式开发人员都可借助 AMD ROCm™——一款业经验证的开源软件栈,为边缘应用加速 AI 部署。 工厂自动化、移动机器人中的物理 AI 以及其他 AI 驱动的边缘应用正在快速演进,并推动着对于能在始终在线环境里提供实时 AI 处理、确定性能与长期可靠性的计算平台的需求。 为了满足这些需求,AMD 正扩展其 AMD 锐龙(Ryzen™)
[嵌入式]
AMD 扩展锐龙 AI <font color='red'>嵌入式</font>处理器产品组合,为工业与 AI 边缘解决方案提供高效 AI 计算能力
IAR扩展嵌入式开发平台,推出面向安全关键型应用的长期支持(LTS)服务
瑞典乌普萨拉,2026年3月9日 — IAR今日宣布, 对其嵌入式开发平台进行扩展,推出全新长期支持(Long-Term Support,LTS)服务,旨在帮助客户在漫长的产品生命周期中,维持稳定、可复现的工具链。 在汽车、工业自动化、医疗等安全关键型行业中,嵌入式软件必须在产品投产后多年内保持可维护、可重建和可更新。开发团队需要在完成软件更新、解决问题、适配不断变化的需求的同时,保证开发工具、工作流程与构建环境的一致性。 在此背景下,工具链的稳定性至关重要 —— 编译器或构建环境的微小改动,都可能引发额外的验证与合规工作。因此,长期稳定的技术延续性,对功能安全项目而言至关重要。 面向安全关键型软件的长期稳定性 I
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved