0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread 的灵魂伴侣 | 技术集结

RT-Thread官方账号 2026-03-23 19:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RT-Thread正式启动硬件产品生态共建计划"你有创意,我帮你推广",我们寻找那些藏在工作台、实验室和创客空间的嵌入式硬件创意——无论是一块开发板、一个智能工具,还是一套完整的解决方案。我们诚挚邀请社区开发者、创客和硬件公司,将您的创意原型带到RT-Thread生态,也欢迎已有成熟产品直接入驻!!欢迎加入我们的硬件生态计划,可发送作品(建议包含:产品介绍、演示视频/图片、技术亮点、您的介绍)邮件至hardware@rt-thread.com

今天给大家介绍一下MicroKeen(MKLink)的使用方法,以下来自MKLink创作者的作品内容,欢迎支持!

一、下载口也可以同时当串口用会有多爽

  • 不需要USB 转串口工具 + 杜邦线接线
  • printf直接通过下载口输出到USB虚拟串口
  • 仿真边打印,互不影响

二、SEGGER RTT+MKLink,让串口调试真正自由

嵌入式开发中,我们总是离不开“串口打印”来调试。

但传统串口调试存在很多明显的痛点:

  • 速度慢:输出数据卡顿,占用CPU时间,不能在中断中使用;
  • 硬件占用:需要额外占用 MCUUART 接口资源;
  • 接线麻烦:需要 USB 转串口工具 + 杜邦线接线,步骤繁琐;
  • 资源受限:串口数量有限,调试与功能常常冲突。

如何打破这些痛点?

SEGGER RTT + MKLink完美结合了双方的优势:

  • SEGGER RTT:提供高速、非侵入式的数据传输;
  • MKLink:将 RTT 通道虚拟为标准 USB CDC 串口,不再占用 MCU 的串口!

让调试既拥有 RTT 的性能,又能使用任意串口助手,真正做到“即插即用,自由畅快”!

三、一分钟了解 SEGGER RTT 是什么、怎么用

1、SEGGER RTT是什么?

RTT,全称Real Time Transfer(实时传输),是一种无需中断 MCU 程序执行,就能实现数据与主机交互的调试技术。

它使用一种内存共享机制,将 MCU 内部的数据实时“搬运”到 PC 上。

形象理解:

就像你在 MCU 的 RAM 里放了个“邮箱”,PC 随时来收信,MCU 照常干活,互不打扰。

2、SEGGER RTT 的基本工作原理

在 MCU RAM 中,有一个非常重要的结构体:

_SEGGER_RTT 控制块

它的作用是:

  • 保存多个UpBuffer(MCU PC)DownBuffer(PC MCU)的信息;
  • 包括每个缓冲区的起始地址、大小、写指针、读指针等。

收发数据过程:

  • MCU发送数据➔ 把数据memcpy拷贝到UpBuffer的空闲区域;
  • PC接收数据➔ 通过MKLink 读取 UpBuffer 的数据;
  • PC发送指令➔ 通过MKLink 把数据写入 DownBuffer;
  • MCU读取指令➔ 从 DownBuffer 中memcpy出来。

由于只是内存拷贝,整个收发过程极快,微秒级完成,不会打断 MCU 正常工作。


eba579e0-26aa-11f1-96ea-92fbcf53809c.jpg

3、SEGGER RTT怎么用?

只需简单三步:

步骤一:集成 RTT 源码

从 SEGGER J-Link 安装目录Samples/RTT复制以下文件到工程中,并添加头文件路径。

如我电脑上的路径:

C:\Program Files (x86)\SEGGER\JLink_V632f\Samples\RTT

ebb1e6bc-26aa-11f1-96ea-92fbcf53809c.jpg


步骤二:输出日志到 RTT

#include"SEGGER_RTT.h"
intmain(void)
{
SEGGER_RTT_Init();
SEGGER_RTT_printf(0,"hello RTT\n");
while(1){

}
}

步骤三:连接调试工具

  • 如果使用传统 J-Link,只能用 RTT Viewer 上位机
  • 如果用 MKLink ,可以用任意串口助手直接访问 RTT 数据!

四、MKLink :释放 SEGGER RTT的真正威力

MKLink突破传统,打通了 RTT 和通用串口调试工具之间的隔阂,直接把 RTT 数据转发到USB CDC 虚拟串口,让 MCU 仿佛接了一个超级快的“软串口”!

MCU端:

  • 继续使用 RTT 库发送日志,不需要改变一行代码。

MKLink端:

  • 通过 USB CDC 映射成标准串口;
  • 自动扫描 MCU 内存中_SEGGER_RTT控制块地址(如 0x20000000);
  • 直接读写 UpBuffer / DownBuffer;
  • 完美支持双向通信

PC端:

  • 用你最喜欢的串口助手直接连 MKLink串口,爽快收发!

MKLink 数据流示意图:


ebbda3d0-26aa-11f1-96ea-92fbcf53809c.jpg

效果总结:

  • 不再局限于官方 Viewer;
  • 不再受限于波特率;
  • 不再需要额外串口硬件和线缆;
  • 打开任意串口助手即用,极致灵活!

五、多种使用 SEGGER RTT 功能的方法

1、如何开启MKLink的SEGGER RTT功能

步骤一:找到MKLink 的 USB CDC 虚拟串口

使用USB TypeC数据线与MKLink连接以后,电脑设备端会弹出三个设备:

ebc79822-26aa-11f1-96ea-92fbcf53809c.png

V2和V3会弹出两个USB串行设备端口号,分别是USB转串口和虚拟串口

V4会弹出三个USB串行设备端口号,分别是USB转串口、USB转485端口和虚拟串口

打开虚拟串口后,下载器会自动打印如下信息:

ebd94496-26aa-11f1-96ea-92fbcf53809c.png

V4版本可以通过屏幕界面,来高速你打开的是什么端口,分别打开三个串口号,效果如下:


步骤二:使用串口助手类工具访问 MKLink 的 USB CDC 虚拟串口

比如使用SSCOM,连接MicroLink的串口,输入以下指令:

RTTView.start(0x20000000,1024,0)

  • 0x20000000:搜索RTT控制块的起始地址;
  • 1024:搜寻范围大小;
  • 0:启动RTT的通道。

ebe3b9a8-26aa-11f1-96ea-92fbcf53809c.jpg

_SEGGER_RTT控制块地址可以通过查看MDK编译生成的.map文件来查找,如下:

ebef5c86-26aa-11f1-96ea-92fbcf53809c.jpg

可知,_SEGGER_RTT在地址0x20000040处,可以通过设置搜寻的地址和大小来重新启动MicroLink的RTT功能。

2、固定_SEGGER_RTT的地址的方法

步骤一:打开SEGGER_RTT.c,添加红框中的代码,宏SEGGER_RTT_OPS_ADDR可以将_SEGGER_RTT的地址固定在0x20000000

ebf920f4-26aa-11f1-96ea-92fbcf53809c.png

代码如下,方便直接复制:

#defineSEGGER_RTT_OPS_ADDR 0X20000200
#define__ARM_AT(x)".ARM.__at_"#x
#defineARM_AT(x) __ARM_AT(x)
#ifdefined(__CC_ARM) // ARM Compiler 5 (AC5)
#defineSEGGER_RTT_SECTION __attribute__((at(BOOT_FLASH_OPS_ADDR)))
#elifdefined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6000000) // ARM Compiler 6 (AC6)
#defineSEGGER_RTT_SECTION __attribute__((section(ARM_AT(SEGGER_RTT_OPS_ADDR))))
#elifdefined(__GNUC__) // GCC
#defineSEGGER_RTT_SECTION __attribute__((section(".segger_rtt_ops"), used, aligned(4)))
#else
#defineSEGGER_RTT_SECTION
#endif
SEGGER_RTT_SECTION
SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT));

3、上电自动开启SEGGER_RTT功能的方法

步骤一:打开U盘中python文件夹下的default_config.py,添加红框中的代码,下载器上电会自动执行default_config.py脚本。

ec053ea2-26aa-11f1-96ea-92fbcf53809c.png

4、MDK中将printf重定向到SEGGER_RTT通道的方法

步骤一:RTE配置

1.打开RTE 配置窗口(菜单:Project -> Manage -> Run-Time Environment)。

ec109144-26aa-11f1-96ea-92fbcf53809c.png

2.勾选以下选项:

  • CMSIS-Compiler下勾选CORE
  • STDOUT(API)下勾选Custom

如果你在RTE中找不到CMSIS-Compiler,说明你的MDK版本较低——如果不想升级MDK,则可以通过下面的链接从官方直接下载对应的cmsis-pack

https://www.keil.arm.com/packs/cmsis-compiler-arm/

或者老版本的cmsis-pack中,找到Compiler

ec1d0fdc-26aa-11f1-96ea-92fbcf53809c.png

步骤二:添加stdout_putchar()

在代码中实现stdout_putchar()函数——用它来把printf重定向到RTT通道:

intstdout_putchar(intch)
{
SEGGER_RTT_PutChar(0, ch);
returnch;
}

5、将 RT-Thread 系统命令行重定向到RTT通道的方法

方法一:安装SEGGER_RTT软件包

SEGGER_RTT软件包是将 RT-Thread 的msh重定向到SEGGER RTT

ec297934-26aa-11f1-96ea-92fbcf53809c.png

方法二:安装agile_console软件包

agile_console软件包可以将 RT-Thread 的msh重定向到多个端口,比如可以不影响原先uart打印的基础上,再增加一路RTT端口,比较适合两种方式需要同时使用的场景。

步骤一:安装软件包

ec3689b2-26aa-11f1-96ea-92fbcf53809c.png

步骤二:单片机添加SEGGER_RTT源码

从 SEGGER J-Link 安装目录Samples/RTT复制以下文件到工程中,并添加头文件路径。

如我电脑上的路径:

C:\Program Files (x86)\SEGGER\JLink_V632f\Samples\RTT

ec495a56-26aa-11f1-96ea-92fbcf53809c.png

步骤三:单片机添加agile软件包的适配代码

添加一个agile_console_rtt_be.c文件,代码如下:

#include
#include
#include"SEGGER_RTT.h"
staticstructagile_console_backend_console_backend= {0};

staticvoidrtt_backend_output(rt_device_tdev,constuint8_t*buf,intlen)
{
SEGGER_RTT_Write(0,buf,len);
}

staticintrtt_backend_read(rt_device_tdev,uint8_t*buf,intlen)
{
return SEGGER_RTT_Read(0,buf, len);
}

staticvoidsegger_rtt_check(void)
{
while(SEGGER_RTT_HasKey())
{
agile_console_wakeup();
}
}

staticintagile_console_rtt_init(void)
{
SEGGER_RTT_Init();
rt_thread_idle_sethook(segger_rtt_check);

_console_backend.output = rtt_backend_output;
_console_backend.read = rtt_backend_read;

agile_console_backend_register(&_console_backend);
return0;
}
INIT_BOARD_EXPORT(agile_console_rtt_init);

六、用户真实评价


ec54f71c-26aa-11f1-96ea-92fbcf53809c.pngec5f3dee-26aa-11f1-96ea-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 硬件
    +关注

    关注

    12

    文章

    3626

    浏览量

    69160
  • 串口
    +关注

    关注

    15

    文章

    1626

    浏览量

    83307
  • 实时传输
    +关注

    关注

    0

    文章

    14

    浏览量

    6765
  • RT-Thread
    +关注

    关注

    32

    文章

    1636

    浏览量

    45190
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RT-Thread Vector软件包:嵌入式开发的动态数组容器 | 技术集结

    RT-Thread Vector软件包:嵌入式开发的动态数组容器 | 技术集结
    的头像 发表于 01-25 09:33 5607次阅读
    <b class='flag-5'>RT-Thread</b> Vector软件包:嵌入式开发的动态数组容器 | <b class='flag-5'>技术</b><b class='flag-5'>集结</b>

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本文是RT-Thread实时操作系统的编程指南
    发表于 11-26 16:06 0次下载

    RT-Thread全球技术大会:RT-Thread开源重塑软件发展新生态

    RT-Thread全球技术大会:RT-Thread开源重塑软件发展新生态,市场空间巨大,以开放的心态不断提升技术水平,大胆创新,迎接挑战!       审核编辑:彭静
    的头像 发表于 05-27 10:47 2003次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RT-Thread</b>开源重塑软件发展新生态

    RT-Thread全球技术大会:萤石研发团队使用RT-Thread技术挑战

    RT-Thread全球技术大会:研发团队使用RT-Thread技术挑战         审核编辑:彭静
    的头像 发表于 05-27 11:36 2666次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:萤石研发团队使用<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>技术</b>挑战

    2022 RT-Thread全球技术大会:萤石EZIOT SDK对RT-Thread的支持

    2022 RT-Thread全球技术大会:RT-Thread在摄像头及IoT设备上的实践经验分享
    的头像 发表于 05-27 11:08 2010次阅读
    2022 <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:萤石EZIOT SDK对<b class='flag-5'>RT-Thread</b>的支持

    RT-Thread全球技术大会:RT-Thread Smart更好的兼容Linux生态

    RT-Thread全球技术大会:RT-Thread Smart更好的兼容Linux生态             审核编辑:彭静
    的头像 发表于 05-27 14:31 3162次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RT-Thread</b> Smart更好的兼容Linux生态

    RT-Thread全球技术大会:Kconfig在RT-Thread中的工作机制

    RT-Thread全球技术大会:Kconfig在RT-Thread中的工作机制               审核编辑:彭静
    的头像 发表于 05-27 14:49 2493次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作机制

    RT-Thread全球技术大会:在RT-Thread上编写测试用例

    RT-Thread全球技术大会:在RT-Thread上编写测试用例           审核编辑:彭静
    的头像 发表于 05-27 16:28 2260次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:在<b class='flag-5'>RT-Thread</b>上编写测试用例

    RT-Thread全球技术大会:RT-Thread测试用例集合案例

    RT-Thread全球技术大会:RT-Thread测试用例集合案例           审核编辑:彭静
    的头像 发表于 05-27 16:34 2976次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RT-Thread</b>测试用例集合案例

    RT-Thread全球技术大会:RT-Thread对POSIX的实现情况介绍

    RT-Thread全球技术大会:RT-Thread对POSIX的实现情况介绍             审核编辑:彭静
    的头像 发表于 05-27 16:52 2907次阅读
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技术</b>大会:<b class='flag-5'>RT-Thread</b>对POSIX的实现情况介绍

    RT-Thread学习笔记 RT-Thread的架构概述

    RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS
    的头像 发表于 07-09 11:27 6184次阅读
    <b class='flag-5'>RT-Thread</b>学习笔记 <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南
    发表于 02-22 18:23 10次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 6606次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio学习