普冉PY32系列(五) 使用JLink RTT代替串口輸出日誌

来源:https://www.cnblogs.com/milton/archive/2023/02/11/17112492.html
-Advertisement-
Play Games

JLink RTT(Real Time Transfer) 是用於嵌入式系統監控和交互的工具, 類似於SWO, 可以雙向通信, 特點是性能很高, 基本上不影響嵌入式應用的實時行為, 可以對比一下使用printf輸出日誌時的各種限制. 而且因為和 JLink 介面集成, 不需要再浪費一個串口輸出 pr... ...


目錄

JLink RTT

JLink RTT(Real Time Transfer) 是用於嵌入式系統監控和交互的工具, 類似於SWO, 可以雙向通信, 特點是性能很高, 基本上不影響嵌入式應用的實時行為, 可以對比一下使用printf輸出日誌時的各種限制. 而且因為和 JLink 介面集成, 不需要再浪費一個串口輸出 printf了.

完整的介紹可以參考SEGGER官網的介紹頁 https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

JLink RTT相關的軟硬體

硬體部分

RTT可以支持最低端的 JLink OB, 因此硬體上只需要有一個 JLink OB.

軟體部分

軟體部分在 JLink 的安裝包中都包含了, 主要是兩部分

  • 用於上位機的 RTT Viewer, 在安裝路徑下可以找到, 打開是類似於串口客戶端的界面
  • 用於MCU的RTT庫文件, 在安裝路徑的 Samples/RTT/ 目錄下可以找到一個 SEGGER_RTT_Vxxx.tgz文件, 這個文件里包含了RTT需要的庫.

解開後目錄結構為

├── Config
│   └── SEGGER_RTT_Conf.h
├── Examples
│   ├── Main_RTT_InputEchoApp.c
│   ├── Main_RTT_MenuApp.c
│   ├── Main_RTT_PrintfTest.c
│   └── Main_RTT_SpeedTestApp.c
├── LICENSE.md
├── README.md
├── RTT
│   ├── SEGGER_RTT_ASM_ARMv7M.S
│   ├── SEGGER_RTT.c
│   ├── SEGGER_RTT.h
│   └── SEGGER_RTT_printf.c
└── Syscalls
    ├── SEGGER_RTT_Syscalls_GCC.c
    ├── SEGGER_RTT_Syscalls_IAR.c
    ├── SEGGER_RTT_Syscalls_KEIL.c
    └── SEGGER_RTT_Syscalls_SES.c

在PY32F002A/003/030上使用JLink RTT

需要添加到項目的文件有

SEGGER_RTT.c
SEGGER_RTT.h
SEGGER_RTT_printf.c
SEGGER_RTT_Conf.h

其中 SEGGER_RTT_Conf.h 是RTT的配置文件

配置 SEGGER_RTT_Conf.h

其它的配置可以使用預設, 只需要調整一下 BUFFER_SIZE_UP, 這是在MCU上需要占用的位元組數, 預設為 1024, 對於普通調試可以設成256.

#ifndef   BUFFER_SIZE_UP
  #define BUFFER_SIZE_UP                            (256)  // Size of the buffer for terminal output of target, up to host (Default: 1k)
#endif

再說一下 SEGGER_RTT_LOCK()和 SEGGER_RTT_UNLOCK(), 這兩個方法用於禁用/啟用MCU中斷, 避免在RTT輸出時被打斷, 在M0/M0+上這兩個方法預設為空, 因此是會產生輸出混雜的情況的. 這塊可以不設置, 因為RTT列印速度很快, 普通應用混雜的概率不大.

在項目中集成RTT輸出

在需要使用RTT輸出的程式文件上添加頭文件

#include "SEGGER_RTT.h"

然後就可以調用RTT的方法輸出了, 使用方法和printf基本上是一樣的

# 輸出字元串
SEGGER_RTT_WriteString(0, "exti_12 triggered\r\n");
# 輸出帶參數的字元串
SEGGER_RTT_printf(0, "SystemCoreClock: %ld\r\n", SystemCoreClock);

更完整的格式例子, 可以參考JLink ATT中的 Main_RTT_PrintfTest.c 文件

使用 RTT Viewer 查看輸出

打開 RTT Viewer, 會彈出配置視窗, 以下根據 JLink OB進行配置

  • Connection to J-Link: 選擇 USB
  • Specify Target Device: 選擇 PY32F030X8, (如果是32KF/4KR的選擇 PY32F030X6)
  • Target Interface & Speed: SWD, 4000KHz
  • RTT Control Block: Auto Detection

其它預設, 點擊OK後就會連接到目標開始接收輸出.

和使用串口有幾點區別

  1. 使用 RTT 輸出和 JLink 燒錄是衝突的, 在燒錄前需要斷開 RTT
  2. RTT 帶緩存, 因此即使錯過一部分日誌, 在連接上 RTT 後, 會將前面緩存的日誌也顯示出來
  3. RTT 的輸出不帶時間戳, 如果用慣了CuteCOM, 對這點可能會不習慣.

使用JLink RTT的示例代碼

用於演示的代碼已經放到倉庫

https://github.com/IOsetting/py32f0-template/tree/main/Examples/LL/SEGGER_RTT


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大數據時代,各行各業對數據採集的需求日益增多,網路爬蟲的運用也更為廣泛,越來越多的人開始學習網路爬蟲這項技術,K哥爬蟲此前已經推出不少爬蟲進階、逆向相關文章,為實現從易到難全方位覆蓋,特設【0基礎學爬蟲】專欄,幫助小白快速入門爬蟲,本期為爬蟲的基本介紹。 一、爬蟲概述 爬蟲又稱網路蜘蛛、網路機器人, ...
  • 教程簡介 C#概述 - 從簡單和簡單的步驟學習C#從基本到高級概念,包括概述,環境設置,程式結構,基本語法,數據類型,類型轉換,變數,常量,運算符,決策,迴圈,方法,Nullables ,數組,字元串,結構,枚舉,文件I / O,類,封裝,介面,繼承,命名空間,多態性,運算符重載,封裝,反射,屬性, ...
  • 首先我們需要瞭解到分散式事件匯流排是什麼; 分散式事件匯流排是一種在分散式系統中提供事件通知、訂閱和發佈機制的技術。它允許多個組件或微服務之間的協作和通信,而無需直接耦合或瞭解彼此的實現細節。通過事件匯流排,組件或微服務可以通過發佈或訂閱事件來實現非同步通信。 例如,當一個組件完成了某項任務並生成了一個事件 ...
  • 前言 Web項目中很多網頁資源比如html、js、css通常會做伺服器端的緩存,加快網頁的載入速度 一些周期性變化的API數據也可以做緩存,例如廣告資源位數據,菜單數據,商品類目數據,商品詳情數據,商品列表數據,公共配置數據等,這樣就可以省去很多在服務端手動實現緩存的操作 最早資源緩存大部分都用Ex ...
  • 這是一個關於 ASP.NET 6 依賴註入的系列文章。 在這個系列中,我們將瞭解到什麼是依賴註入、控制反轉,它能夠做什麼,以及我們為什麼要使用它。 之後,我們會進一步瞭解 ASP.NET 6 依賴註入的生命周期、服務容器等重要概念。 最後,我們再深入瞭解服務作用域和更多的服務註冊與註入方式。 概述 ...
  • 設計原則系列文章 必知必會的設計原則——單一職責原則 必知必會的設計原則——開放封閉原則 必知必會的設計原則——依賴倒置原則 必知必會的設計原則——里氏替換原則 概述 1、 客戶端不應該依賴它不需要的介面。2、 一個類對另一個類的依賴應該建立在最小介面上。3、介面應儘量細分,不要在一個介面中放很多方 ...
  • 「CSDN」作為中國最具人氣的專業 IT 社區,一直是廣大 IT 技術博主的主選陣地。這些年 CSDN 在知識付費領域的探索也遠遠超過其它平臺,大家(尤其是創作型博主)對 CSDN 的認可度也越來越高,CSDN 上目前有很多非常優秀的技術專欄。 CSDN博客專家 是 CSDN 給予影響力較大的技術類 ...
  • 前言 AppImage 逐漸成為 Linux 常用的一種軟體包格式,本文將介紹如何將 AppImage 文件添加到 Ubuntu 的應用程式中。 如下圖中的 CAJViewer : 操作過程 設置相關許可權 對要操作的 AppImage 右擊 > 屬性進行如下圖的設置,必須勾選 允許執行文件 創建 d ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...