硬汉嵌入式论坛

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

[RTT] 分享个H7-TOOL的RTT快捷发送面板使用案例,方便大家使用2.2.1新功能参照

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
发表于 2023-3-25 02:53:07 | 显示全部楼层 |阅读模式
对于RTT功能,我们一般都是将其作为打印log信息使用。当然,用于接收消息也是完全没问题,这里分享下用RTT接收消息注意事项

V7-RTT交互.7z (1.33 MB, 下载次数: 20)

1、宏定义BUFFER_SIZE_DOWN不能开小了,我这里是直接开的1KB
[C] 纯文本查看 复制代码
#ifndef   BUFFER_SIZE_DOWN
  #define BUFFER_SIZE_DOWN                          (1024)    // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)
#endif

2、消息接收的处理,详情可以看分享的例子,我这里使用的下面两个函数实现:
[C] 纯文本查看 复制代码
                /* 做一个简单的回环功能 */
                if (SEGGER_RTT_HasKey()) 
                {
                        //GetKey = SEGGER_RTT_GetKey();
                        memset(&acIn[0], 0, BufferSize);
                        NumBytes = SEGGER_RTT_Read(0, &acIn[0], BufferSize);
                        if (NumBytes) 
                        {
                                SEGGER_RTT_SetTerminal(0);
                                SEGGER_RTT_printf(0, "SEGGER_RTT_GetString = %s\r\n",  &acIn[0]);
                        }
                }



程序是做了一个回环测,效果如下:

动画.gif

转义字符方式,从TOOL上位机发送hex给目标板做的回环

[C] 纯文本查看 复制代码
                /* 做一个简单的回环功能 */
                if (SEGGER_RTT_HasKey()) 
                {
                        //GetKey = SEGGER_RTT_GetKey();
                        memset(&acIn[0], 0, BufferSize);
                        NumBytes = SEGGER_RTT_Read(0, &acIn[0], BufferSize);
                        #if 1   /* 接收hex,回环发送 */
                                SEGGER_RTT_SetTerminal(0);
                                SEGGER_RTT_printf(0, "RTT_GetString =");
                                for(int i = 0; i < NumBytes; i++)
                                {
                                        SEGGER_RTT_printf(0, "%x",  acIn[i]);
                                }
                                SEGGER_RTT_printf(0, "\r\n");
                        #else   /* 接收字符串,回环发送 */
                                if (NumBytes) 
                                {
                                        SEGGER_RTT_SetTerminal(0);
                                        SEGGER_RTT_printf(0, "RTT_GetString = %s\r\n",  &acIn[0]);
                                }
                        #endif
                }



动画.gif


回复

使用道具 举报

1

主题

92

回帖

100

积分

初级会员

积分
100
发表于 2023-3-25 08:40:11 | 显示全部楼层
RTT能发HEX不?还是只能发字符串?
回复

使用道具 举报

8

主题

155

回帖

179

积分

初级会员

H7 TOOL 大法好!

积分
179
发表于 2023-3-25 09:01:01 | 显示全部楼层
牛阿
回复

使用道具 举报

8

主题

155

回帖

179

积分

初级会员

H7 TOOL 大法好!

积分
179
发表于 2023-3-25 09:04:12 | 显示全部楼层
老师,想请教一下,我发现用RTT 的 print , 有时候并不会打印(虽然程序中写了print , 但是有些会打印 有些就不会),这是为啥?跟RTT发送缓存有关系吗? 还望老师指点迷津 感谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
 楼主| 发表于 2023-3-25 09:30:02 | 显示全部楼层
nnqtdf 发表于 2023-3-25 08:40
RTT能发HEX不?还是只能发字符串?

RTT很少收发hex用,需要上位机处理才行。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
 楼主| 发表于 2023-3-25 09:34:43 | 显示全部楼层
312456990 发表于 2023-3-25 09:04
老师,想请教一下,我发现用RTT 的 print , 有时候并不会打印(虽然程序中写了print , 但是有些会打印 有些就 ...

大家的SEGGER_RTT_PRINTF_BUFFER_SIZE设置有多大,那么函数SEGGER_RTT_printf就需要多大的局部变量,比如我们一般设置为1KB,那边RTT的printf函数有个1KB的局部变量,所以栈空间要足。

然后就是函数SEGGER_RTT_printf不支持浮点打印,使用sprintf+writestring实现即可
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
 楼主| 发表于 2023-3-25 11:39:46 | 显示全部楼层
nnqtdf 发表于 2023-3-25 08:40
RTT能发HEX不?还是只能发字符串?

支持了下转移字符方式的hex,从上位机发hex给目标板

QQ截图20230325114451.png


回复

使用道具 举报

1

主题

92

回帖

100

积分

初级会员

积分
100
发表于 2023-3-25 15:09:04 | 显示全部楼层
eric2013 发表于 2023-3-25 11:39
支持了下转移字符方式的hex,从上位机发hex给目标板

这样在上位机处理一下,就支持HEX发送
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
 楼主| 发表于 2023-3-25 15:23:01 | 显示全部楼层
nnqtdf 发表于 2023-3-25 15:09
这样在上位机处理一下,就支持HEX发送

从目标板到上位机,大家自己printf发送hex格式实现吧,还省事点。

因为RTT本身有个颜色格式支持,别升级整出新问题了。
回复

使用道具 举报

1

主题

92

回帖

100

积分

初级会员

积分
100
发表于 2023-3-25 15:51:50 | 显示全部楼层
eric2013 发表于 2023-3-25 15:23
从目标板到上位机,大家自己printf发送hex格式实现吧,还省事点。

因为RTT本身有个颜色格式支持,别升 ...

上位机方面,要不要做个HEX发送选项呢,不用自己输\x
回复

使用道具 举报

1

主题

92

回帖

100

积分

初级会员

积分
100
发表于 2023-3-25 15:55:58 | 显示全部楼层
eric2013 发表于 2023-3-25 15:23
从目标板到上位机,大家自己printf发送hex格式实现吧,还省事点。

因为RTT本身有个颜色格式支持,别升 ...

目标板到上位机一般都是字符串的多,但是上位机到目标板可能很多都是HEX,这样解析命令方便。就像这样

QQ截图20230325155453.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
 楼主| 发表于 2023-3-25 16:31:16 | 显示全部楼层
nnqtdf 发表于 2023-3-25 15:55
目标板到上位机一般都是字符串的多,但是上位机到目标板可能很多都是HEX,这样解析命令方便。就像这样

...

好的,不过转移字符也行。后面再考虑加入这种方式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 06:33 , Processed in 0.200464 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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