RT-Thread正式啟動硬件產品生態共建計劃"你有創意,我幫你推廣",我們尋找那些藏在工作臺、實驗室和創客空間的嵌入式硬件創意——無論是一塊開發板、一個智能工具,還是一套完整的解決方案。我們誠摯邀請社區開發者、創客和硬件公司,將您的創意原型帶到RT-Thread生態,也歡迎已有成熟產品直接入駐!!歡迎加入我們的硬件生態計劃,可發送作品(建議包含:產品介紹、演示視頻/圖片、技術亮點、您的介紹)郵件至hardware@rt-thread.com。
今天給大家介紹一下MicroKeen(MKLink)的使用方法,以下來自MKLink創作者的作品內容,歡迎支持!
一、下載口也可以同時當串口用會有多爽
二、SEGGER RTT+MKLink,讓串口調試真正自由
在嵌入式開發中,我們總是離不開“串口打印”來調試。
但傳統串口調試存在很多明顯的痛點:
- 速度慢:輸出數據卡頓,占用CPU時間,不能在中斷中使用;
- 硬件占用:需要額外占用 MCU 的 UART 接口資源;
- 接線麻煩:需要 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 正常工作。

3、SEGGER RTT怎么用?
只需簡單三步:
步驟一:集成 RTT 源碼
從 SEGGER J-Link 安裝目錄Samples/RTT復制以下文件到工程中,并添加頭文件路徑。
如我電腦上的路徑:
C:\Program Files (x86)\SEGGER\JLink_V632f\Samples\RTT

步驟二:輸出日志到 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 數據流示意圖:

效果總結:
- 不再局限于官方 Viewer;
- 不再受限于波特率;
- 不再需要額外串口硬件和線纜;
- 打開任意串口助手即用,極致靈活!
五、多種使用 SEGGER RTT 功能的方法
1、如何開啟MKLink的SEGGER RTT功能
步驟一:找到MKLink 的 USB CDC 虛擬串口
使用USB TypeC數據線與MKLink連接以后,電腦設備端會彈出三個設備:

V2和V3會彈出兩個USB串行設備端口號,分別是USB轉串口和虛擬串口
V4會彈出三個USB串行設備端口號,分別是USB轉串口、USB轉485端口和虛擬串口
打開虛擬串口后,下載器會自動打印如下信息:

V4版本可以通過屏幕界面,來高速你打開的是什么端口,分別打開三個串口號,效果如下:
步驟二:使用串口助手類工具訪問 MKLink 的 USB CDC 虛擬串口
比如使用SSCOM,連接MicroLink的串口,輸入以下指令:
RTTView.start(0x20000000,1024,0)
- 0x20000000:搜索RTT控制塊的起始地址;
- 1024:搜尋范圍大小;
- 0:啟動RTT的通道。

_SEGGER_RTT控制塊地址可以通過查看MDK編譯生成的.map文件來查找,如下:

可知,_SEGGER_RTT在地址0x20000040處,可以通過設置搜尋的地址和大小來重新啟動MicroLink的RTT功能。
2、固定_SEGGER_RTT的地址的方法
步驟一:打開SEGGER_RTT.c,添加紅框中的代碼,宏SEGGER_RTT_OPS_ADDR可以將_SEGGER_RTT的地址固定在0x20000000

代碼如下,方便直接復制:
#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腳本。

4、MDK中將printf重定向到SEGGER_RTT通道的方法
步驟一:RTE配置
1.打開RTE 配置窗口(菜單:Project -> Manage -> Run-Time Environment)。

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:

步驟二:添加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

方法二:安裝agile_console軟件包
agile_console軟件包可以將 RT-Thread 的msh重定向到多個端口,比如可以不影響原先uart打印的基礎上,再增加一路RTT端口,比較適合兩種方式需要同時使用的場景。
步驟一:安裝軟件包

步驟二:單片機添加SEGGER_RTT源碼
從 SEGGER J-Link 安裝目錄Samples/RTT復制以下文件到工程中,并添加頭文件路徑。
如我電腦上的路徑:
C:\Program Files (x86)\SEGGER\JLink_V632f\Samples\RTT

步驟三:單片機添加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);
六、用戶真實評價


-
硬件
+關注
關注
12文章
3602瀏覽量
69075 -
串口
+關注
關注
15文章
1624瀏覽量
83021 -
實時傳輸
+關注
關注
0文章
14瀏覽量
6764 -
RT-Thread
+關注
關注
32文章
1624瀏覽量
44993
發布評論請先 登錄
RT-Thread編程指南
RT-Thread全球技術大會:RT-Thread開源重塑軟件發展新生態
RT-Thread全球技術大會:RT-Thread Smart更好的兼容Linux生態
RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制
RT-Thread學習筆記 RT-Thread的架構概述
RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
RT-Thread 的靈魂伴侶 | 技術集結
評論