硬汉嵌入式论坛

 找回密码
 立即注册
楼主: eric2013
收起左侧

[专题教程] 【专题教程第5期】工程调试利器RTT实时数据传输组件,替代串口调试,速度飞快,可以在中断和多任务中随意调用

  [复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120414
QQ
 楼主| 发表于 2024-12-26 08:21:28 | 显示全部楼层
fanxiaochong 发表于 2024-12-25 11:09
你好,为什么我移植完文件和添加完头文件后,编译会出现如图所示error;

分享工程到百度网盘看下
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-8-7 16:56:58 | 显示全部楼层
我很好奇,既然可以使用SEGGER_RTT_SetTerminal分页查看输出的信息,那SEGGER_RTT_printf函数的第一个参数是什么用呢?难道是使用不同的缓冲区吗?如果是的话,那么应该如何配置呢,我使用如下配置,但是只有"Hello from Terminal 0!\n"被打印
[C] 纯文本查看 复制代码
SEGGER_RTT_Init();
  SEGGER_RTT_ConfigUpBuffer(1, "LOG", RTT_ONE_Buffer, sizeof(RTT_ONE_Buffer), SEGGER_RTT_MODE_NO_BLOCK_TRIM);
  SEGGER_RTT_ConfigUpBuffer(2, "DATA", RTT_TWO_Buffer, sizeof(RTT_TWO_Buffer), SEGGER_RTT_MODE_NO_BLOCK_TRIM);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    SEGGER_RTT_SetTerminal(0);
    SEGGER_RTT_WriteString(0, RTT_CTRL_TEXT_BRIGHT_GREEN "Hello from Terminal 0!\n" RTT_CTRL_RESET);
    HAL_Delay(1000);

    // Buffer 1: 日志
    SEGGER_RTT_SetTerminal(1);
    SEGGER_RTT_WriteString(1, RTT_CTRL_TEXT_BRIGHT_YELLOW "[LOG] Hello from Buffer 1!\n" RTT_CTRL_RESET);
    HAL_Delay(1000);

    // Buffer 2: 数据
    SEGGER_RTT_SetTerminal(2);
    SEGGER_RTT_printf(2, "[DATA] timestamp: %d\n", HAL_GetTick());
    HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120414
QQ
 楼主| 发表于 2025-8-8 09:16:28 | 显示全部楼层
capting 发表于 2025-8-7 16:56
我很好奇,既然可以使用SEGGER_RTT_SetTerminal分页查看输出的信息,那SEGGER_RTT_printf函数的第一个参数 ...

这个是设置的不同通道,RTT打印仅用通道0
回复

使用道具 举报

17

主题

36

回帖

87

积分

初级会员

积分
87
发表于 2025-9-10 10:25:41 | 显示全部楼层
这个rtt能否打印带个时间戳,
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120414
QQ
 楼主| 发表于 2025-9-11 10:40:38 | 显示全部楼层
zs890801 发表于 2025-9-10 10:25
这个rtt能否打印带个时间戳,

TOOL的上位机勾选时间戳就可以了

1234.png
回复

使用道具 举报

5

主题

40

回帖

55

积分

初级会员

积分
55
发表于 2025-12-25 16:58:12 | 显示全部楼层
这个是什么问题啊?用的是J-Link的RTT
ScreenShot_2025-12-25_165357_802.png
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120414
QQ
 楼主| 发表于 2025-12-26 11:04:03 | 显示全部楼层
YYY13941 发表于 2025-12-25 16:58
这个是什么问题啊?用的是J-Link的RTT

这个不清楚,现在JLINK用的少了,对于一些错误现象不太熟悉了。
回复

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
QQ
发表于 6 天前 | 显示全部楼层
#define USE_DEBUG_PRINTF
#ifdef USE_DEBUG_PRINTF
    #define DPRINTF(fmt...) do{if(printf_en>=4){SEGGER_RTT_SetTerminal(2);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_GREEN"\r\nDebug:");SEGGER_RTT_printf(0,fmt);}}while(0)
#else
    #define DPRINTF(fmt...)
#endif

#define USE_ERROR_PRINTF
#ifdef USE_ERROR_PRINTF
    #define EPRINTF(fmt...) do{if(printf_en>=2){SEGGER_RTT_SetTerminal(4);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_RED"\r\nError:");SEGGER_RTT_printf(0,fmt);SEGGER_RTT_printf(0,"  time:%s .at line %d in %s\r\n",__DATE__,__LINE__,__FILE__);}}while(0)
#else
    #define EPRINTF(fmt...)
#endif

#define USE_WARN_PRINTF
#ifdef USE_WARN_PRINTF
    #define WPRINTF(fmt...) do{if(printf_en>=3){SEGGER_RTT_SetTerminal(3);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_YELLOW"\r\nWarn:");SEGGER_RTT_printf(0,fmt);SEGGER_RTT_printf(0,"  time:%s .at line %d in %s\r\n",__DATE__,__LINE__,__FILE__);}}while(0)
#else
    #define WPRINTF(fmt...)
#endif

#define USE_INFO_PRINTF
#ifdef USE_INFO_PRINTF
    #define IPRINTF(fmt...)  do{if(printf_en>=1){SEGGER_RTT_SetTerminal(1);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_MAGENTA"\r\ninfo:");SEGGER_RTT_printf(0,fmt);}}while(0)
#else
    #define IPRINTF(fmt...)
#endif

#define USE_PRINTF
#ifdef USE_PRINTF
    #define PRINTF(fmt...)  do{if(printf_en>=0){SEGGER_RTT_SetTerminal(0);SEGGER_RTT_printf(0,fmt);}}while(0)
#else
    #define PRINTF(fmt...)
#endif我这样用宏定义,在STM32L151上,RTT输出正常,在STM32H743上,RTT就什么输出都没有。请问这是什么原因?另外,在STM32H743上直接调用SEGGER_RTT_SetTerminal(0);
            SEGGER_RTT_printf(0, "SEGGER_RTT_GetKey\r\n");是可以正常输出的。
回复

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
QQ
发表于 6 天前 | 显示全部楼层
#define USE_DEBUG_PRINTF
#ifdef USE_DEBUG_PRINTF
    #define DPRINTF(fmt...) do{if(printf_en>=4){SEGGER_RTT_SetTerminal(2);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_GREEN"\r\nDebug:");SEGGER_RTT_printf(0,fmt);}}while(0)
#else
    #define DPRINTF(fmt...)
#endif

#define USE_ERROR_PRINTF
#ifdef USE_ERROR_PRINTF
    #define EPRINTF(fmt...) do{if(printf_en>=2){SEGGER_RTT_SetTerminal(4);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_RED"\r\nError:");SEGGER_RTT_printf(0,fmt);SEGGER_RTT_printf(0,"  time:%s .at line %d in %s\r\n",__DATE__,__LINE__,__FILE__);}}while(0)
#else
    #define EPRINTF(fmt...)
#endif

#define USE_WARN_PRINTF
#ifdef USE_WARN_PRINTF
    #define WPRINTF(fmt...) do{if(printf_en>=3){SEGGER_RTT_SetTerminal(3);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_YELLOW"\r\nWarn:");SEGGER_RTT_printf(0,fmt);SEGGER_RTT_printf(0,"  time:%s .at line %d in %s\r\n",__DATE__,__LINE__,__FILE__);}}while(0)
#else
    #define WPRINTF(fmt...)
#endif

#define USE_INFO_PRINTF
#ifdef USE_INFO_PRINTF
    #define IPRINTF(fmt...)  do{if(printf_en>=1){SEGGER_RTT_SetTerminal(1);SEGGER_RTT_printf(0, RTT_CTRL_TEXT_BRIGHT_MAGENTA"\r\ninfo:");SEGGER_RTT_printf(0,fmt);}}while(0)
#else
    #define IPRINTF(fmt...)
#endif

#define USE_PRINTF
#ifdef USE_PRINTF
    #define PRINTF(fmt...)  do{if(printf_en>=0){SEGGER_RTT_SetTerminal(0);SEGGER_RTT_printf(0,fmt);}}while(0)
#else
    #define PRINTF(fmt...)
#endif请问我这样定义宏有问题吗?我在STM32L151上这样定义,RTT使用正常。在STM32H743上这样使用,就什么都不打印,但在STM32H743上调用SEGGER_RTT_SetTerminal(0);
            SEGGER_RTT_printf(0, "SEGGER_RTT_GetKey\r\n");这些,却是正常的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-8 21:38 , Processed in 0.056911 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表