硬汉嵌入式论坛

 找回密码
 立即注册
查看: 38926|回复: 114
收起左侧

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

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
发表于 2018-4-13 00:59:43 | 显示全部楼层 |阅读模式
说明:
1、串口作为经典的调试方式已经存在好多年了,缺点是需要一个专门的硬件接口。现在有了SEGGER的RTT(已经发布有几年了),无需占用系统额外的硬件资源,而且速度超快,是替代串口调试的绝佳方式。
2、RTT Viewer小软件支持多个虚拟端口消息展示,比如用户可以一个用于标准输出,一个用于错误输出,另一个用于调试输出。根据需要还可以再增加输出窗口。


百度云:
链接: https://pan.baidu.com/s/1nzBATAA2q9G_XABzMw1Adg 提取码: 8nuw

专题教程下载:
专题教程第5期:工程调试利器SEGGER的RTT组件,替代串口调试(V1.1).pdf (1.69 MB)

配套例子(含MDK和IAR,例子无病毒,放心下载):
STM32F103ZET6开发板: V4-工程调试利器SEGGER的RTT组件,替代串口调试.rar (1.99 MB, 下载次数: 3318)
STM32F407IGT6开发板: V5-工程调试利器SEGGER的RTT组件,替代串口调试.rar (4.68 MB, 下载次数: 3145)
STM32F429BIT6开发板: V6-工程调试利器SEGGER的RTT组件,替代串口调试.rar (5.04 MB, 下载次数: 2514)
STM32H743XIH6开发板: V7-工程调试利器SEGGER的RTT组件,替代串口调试.7z (1.33 MB, 下载次数: 1367)

教程目录:
5.png

RTT Viewer效果截图:
1.png
2.png
3.png
4.png

H7-TOOL效果截图:








回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-13 02:15:57 | 显示全部楼层
QQ截图20180413021347.png

Google浏览器这么提示是因为去年论坛被恶意攻击和恶意举报的结果。
回复

使用道具 举报

4

主题

13

回帖

25

积分

新手上路

积分
25
发表于 2018-4-13 10:37:07 | 显示全部楼层
谢谢硬汉哥分享,硬汉哥这内容跟预告不符啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-13 10:46:43 | 显示全部楼层
cyhuaixang 发表于 2018-4-13 10:37
谢谢硬汉哥分享,硬汉哥这内容跟预告不符啊

预告的后面再搞
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2018-4-13 11:03:14 | 显示全部楼层
好像不支持汉字输出啊
1523588434(1).jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-13 11:04:12 | 显示全部楼层
sanit 发表于 2018-4-13 11:03
好像不支持汉字输出啊

是的,不支持中文
回复

使用道具 举报

27

主题

272

回帖

353

积分

高级会员

积分
353
发表于 2018-4-13 11:40:46 | 显示全部楼层
点赞 牛逼  支持
回复

使用道具 举报

0

主题

20

回帖

56

积分

初级会员

积分
56
发表于 2018-4-13 17:10:43 | 显示全部楼层
上手试一试
回复

使用道具 举报

7

主题

125

回帖

146

积分

初级会员

积分
146
发表于 2018-4-15 03:08:27 | 显示全部楼层
使用TrueSTUDIO测试了RTT,单独使用RTT或者单独使用SWV都正常。如果先连接RTT,在进入调试启动SWV,此时RTT有输出,SWV不能正常工作;如果先进入调试启动SWV,再连接RTT,两个都正常,不知道大家有没有类似问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-15 04:34:27 | 显示全部楼层
狂野的庄稼汉 发表于 2018-4-15 03:08
使用TrueSTUDIO测试了RTT,单独使用RTT或者单独使用SWV都正常。如果先连接RTT,在进入调试启动SWV,此时RTT ...

TrueSTUDIO估计用的人少
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2018-4-22 16:20:32 | 显示全部楼层
Eric 您好。
我用 RTT Viewer 打印了很多信息,大概每100ms 一次,数据量不是很大,就是3个 int 型的数据,外加一些字符。
先看下图:
C:\Users\Administrator\Desktop\rtt.bmp
rtt.png

现在碰到了一些新情况。上图中,状态栏显示了 接收到数据的容量,这个容量好像不会随着数据的打印,继续增加
一段时间后,我断开连接,尝试查看以前打印的数据,即把垂直滚动条网上拖。但是我没有发现以前打印的数据

是缓存容量设置得太小吗。
我在 SEGGER_RTT_Conf.h 里是这样设置的:#define  BUFFER_SIZE_UP    (1024*10)。这应该与PC端的显示工具无关啊。

请指教。谢谢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-22 16:29:25 | 显示全部楼层
xaitstu 发表于 2018-4-22 16:20
Eric 您好。
我用 RTT Viewer 打印了很多信息,大概每100ms 一次,数据量不是很大,就是3个 int 型的数据 ...

收到,我晚上就测试下,晚些时候回复你
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-23 11:03:19 | 显示全部楼层
xaitstu 发表于 2018-4-22 16:20
Eric 您好。
我用 RTT Viewer 打印了很多信息,大概每100ms 一次,数据量不是很大,就是3个 int 型的数据 ...

帮你测试了,我这里没问题。
QQ截图20180423110016.png
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2018-4-23 11:27:12 | 显示全部楼层
eric2013 发表于 2018-4-23 11:03
帮你测试了,我这里没问题。

你才接收 0.013MB 的文字,好像不够多啊。

我试试看,是不是我 segger 版本的问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-4-23 11:31:54 | 显示全部楼层
xaitstu 发表于 2018-4-23 11:27
你才接收 0.013MB 的文字,好像不够多啊。

我试试看,是不是我 segger 版本的问题。

不是这意思,我给你截图的意思是我这里是随着打印逐渐增加的。来给你来张大的
QQ截图20180423114123.png
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2018-4-23 13:02:19 | 显示全部楼层
eric2013 发表于 2018-4-23 11:31
不是这意思,我给你截图的意思是我这里是随着打印逐渐增加的。来给你来张大的

原因我找到了,不是 RTT Viewer 版本的问题,是设置的问题。
在菜单里设置: Terminals - Buffer size - 10000 lines,就可以了。这样最大可以显示 10K 行。

10000 lines.png
回复

使用道具 举报

11

主题

30

回帖

63

积分

初级会员

积分
63
发表于 2018-4-27 23:19:38 | 显示全部楼层
请问这个是不是不能像J-Scope那样显示波形?
回复

使用道具 举报

5

主题

86

回帖

101

积分

初级会员

积分
101
发表于 2018-5-5 20:52:42 | 显示全部楼层
为什么“开发人员不必创建特殊的调试版本,代码可以保留在以后发布的项目工程中”呢?
是指在非阻塞模式下运行吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-5-6 11:51:16 | 显示全部楼层
ZXB 发表于 2018-4-27 23:19
请问这个是不是不能像J-Scope那样显示波形?

这个不能显示波形,只能显示文本。

不好意思,刚看到你的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-5-6 11:52:31 | 显示全部楼层
游在云间 发表于 2018-5-5 20:52
为什么“开发人员不必创建特殊的调试版本,代码可以保留在以后发布的项目工程中”呢?
是指在非阻塞模式下 ...

不是,他的意思是你的这个RTT组件不用从你的项目工程里面删掉,即使产品发布了,这个代码也可以继续放在工程里面。
回复

使用道具 举报

5

主题

86

回帖

101

积分

初级会员

积分
101
发表于 2018-5-6 16:57:53 | 显示全部楼层
eric2013 发表于 2018-5-6 11:52
不是,他的意思是你的这个RTT组件不用从你的项目工程里面删掉,即使产品发布了,这个代码也可以继续放在 ...

实际上这些代码保留在项目中还是会对系统产生一定的影响,是这样的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-5-7 02:12:49 | 显示全部楼层
游在云间 发表于 2018-5-6 16:57
实际上这些代码保留在项目中还是会对系统产生一定的影响,是这样的吗?

影响很小,仅占用一点点程序执行时间。
回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2018-7-2 12:25:56 | 显示全部楼层
我复制教程里的打印语句:

SEGGER_RTT_WriteString(0,
RTT_CTRL_RESET"Red: " \
RTT_CTRL_TEXT_RED"This text is red. " \
RTT_CTRL_TEXT_BLACK"" \
RTT_CTRL_BG_BRIGHT_GREEN"This background is green. " \
RTT_CTRL_RESET"Normal text again.\r\n");

显示结果是:

e[0mRed: e[2;31mThis text is red. e[2;30me[4;42mThis background is green. e[0mNormal text again.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-7-2 14:43:10 | 显示全部楼层
张洪阆 发表于 2018-7-2 12:25
我复制教程里的打印语句:

SEGGER_RTT_WriteString(0,

从工程里面复制,另外头文件#include "SEGGER_RTT.h"别忘了加上。
回复

使用道具 举报

332

主题

2031

回帖

3032

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3032
发表于 2018-7-9 09:06:16 | 显示全部楼层
看文档,一般都是用非阻塞模式了? 避免用户程序被阻断?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-7-9 09:11:48 | 显示全部楼层
caicaptain2 发表于 2018-7-9 09:06
看文档,一般都是用非阻塞模式了? 避免用户程序被阻断?

对。
回复

使用道具 举报

332

主题

2031

回帖

3032

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3032
发表于 2018-7-9 09:19:15 | 显示全部楼层

正在尝试RTT viewer。 Segger的目录下,找不到RTT Viewer啊?
Snipaste_2018-07-09_09-17-50.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-7-9 09:29:12 | 显示全部楼层
caicaptain2 发表于 2018-7-9 09:19
正在尝试RTT viewer。 Segger的目录下,找不到RTT Viewer啊?

去官网下载个新版驱动搞下
QQ截图20180709092827.png
回复

使用道具 举报

332

主题

2031

回帖

3032

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3032
发表于 2018-7-9 09:53:48 | 显示全部楼层
eric2013 发表于 2018-7-9 09:29
去官网下载个新版驱动搞下

一会儿就蹦出来这个,似乎是说我这个是盗版?
Snipaste_2018-07-09_09-52-19.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-7-9 12:24:40 | 显示全部楼层
caicaptain2 发表于 2018-7-9 09:53
一会儿就蹦出来这个,似乎是说我这个是盗版?

你的JLINK OB有点老了,最好搞个V9
回复

使用道具 举报

1

主题

71

回帖

74

积分

初级会员

积分
74
发表于 2018-8-1 11:35:42 | 显示全部楼层
RTX 下面 只能发一次 调用 os_dly_wait 后 ,os_idle_demon 直接 Overflow
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-8-2 00:56:40 | 显示全部楼层
252514251 发表于 2018-8-1 11:35
RTX 下面 只能发一次 调用 os_dly_wait 后 ,os_idle_demon 直接 Overflow

是任务栈开小了,加大此任务的任务栈即可。

ps:这个是经过在V5群讨论测试得出的问题原因。
回复

使用道具 举报

27

主题

272

回帖

353

积分

高级会员

积分
353
发表于 2018-9-27 15:30:24 | 显示全部楼层
我终于知道 我 几个月前 为啥 老是 调试不成功了 ,就是因为我 开了  FreeRTOS 的 tickless 模式
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-9-28 00:18:01 | 显示全部楼层
suozhang 发表于 2018-9-27 15:30
我终于知道 我 几个月前 为啥 老是 调试不成功了 ,就是因为我 开了  FreeRTOS 的 tickless 模式

这个还有影响? 非常感谢告知此问题。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2018-11-5 17:39:16 | 显示全部楼层
问一下,SEGGER_RTT_printf(),如何打印数组,比如打印整个数组u8 Test_1[10]={0x00,0x01,0x00,0x00,0x03,0xe8,0x01,0x01,0x01,0xeb};
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-11-6 02:42:46 | 显示全部楼层
蒋坤 发表于 2018-11-5 17:39
问一下,SEGGER_RTT_printf(),如何打印数组,比如打印整个数组u8 Test_1[10]={0x00,0x01,0x00,0x00,0x03,0x ...

可以for循环打印。跟你用printf一样。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2018-11-18 19:56:51 | 显示全部楼层
请问硬汉哥怎么直接代替printf()函数呢? 我用stm32cube创建带freertos的工程,加入SEGGER_RTT、 SEGGER_RTT_Conf、SEGGER_RTT_Syscalls_Keil,使用编译出错“Error: L6915E: Library reports error: __use_no_semihosting was requested, but a semihosting fputc was linked in Not enough information to list load addresses in the image map.”   勾选掉Target->Use Micro LIB 后就会出现一堆错误。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2018-11-19 01:07:32 | 显示全部楼层
老鸟 发表于 2018-11-18 19:56
请问硬汉哥怎么直接代替printf()函数呢? 我用stm32cube创建带freertos的工程,加入SEGGER_RTT、 SEGGER_RT ...

写个fputc空函数就行。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2019-1-9 14:37:51 | 显示全部楼层
按照例程上抑制的,输入A 返回的不是,是那里没配置好嘛?
5.png
6.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106422
QQ
 楼主| 发表于 2019-1-10 01:55:47 | 显示全部楼层
chwf49170168 发表于 2019-1-9 14:37
按照例程上抑制的,输入A 返回的不是,是那里没配置好嘛?

这个功能是没问题的,发送是否测试没问题,只是接受不行?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 01:44 , Processed in 0.610339 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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