RTT打印在分區跳轉后無法打印問題

場景:

RTT打印僅占用JLINK的帶寬,比串口傳輸更快更簡潔,同時RTT可以使用jscope對代碼里面的變量實時繪圖顯示波形,而采用串口打印波形無法實時打印。同時可以保存原始數據到本地進行分析,RTT在各方面完勝串口。


問題描述

正常使用RTT沒有太大的問題,而對FLASH進行分區后,跳轉不同的分區需要重新連接RTT才可以輸出,造成極大的不便。


原因分析:

RTT跳轉后,都會重新初始化RTT的block地址,就會導致RTT VIEWER不能及時識別新的blcik地址,從對應的地址取數據顯示了。那么通過固定RTT的block地址是不是就可以了,打開SEGGER_RTT.c在290行的位置,注銷_SEGGER_RTT _acDownBuffer _acUpBuffer的初始化,將其固定在0x2000000的地址,如下:

// #if SEGGER_RTT_CPU_CACHE_LINE_SIZE
//   #if ((defined __GNUC__) || (defined __clang__))
//     SEGGER_RTT_CB _SEGGER_RTT                                                             __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE)));
//     static char   _acUpBuffer  [SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_UP)]   __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE)));
//     static char   _acDownBuffer[SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_DOWN)] __attribute__ ((aligned (SEGGER_RTT_CPU_CACHE_LINE_SIZE)));
//   #elif (defined __ICCARM__)
//     #pragma data_alignment=SEGGER_RTT_CPU_CACHE_LINE_SIZE
//     SEGGER_RTT_CB _SEGGER_RTT;
//     #pragma data_alignment=SEGGER_RTT_CPU_CACHE_LINE_SIZE
//     static char   _acUpBuffer  [SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_UP)];
//     #pragma data_alignment=SEGGER_RTT_CPU_CACHE_LINE_SIZE
//     static char   _acDownBuffer[SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(BUFFER_SIZE_DOWN)];
//   #else
//     #error "Don't know how to place _SEGGER_RTT, _acUpBuffer, _acDownBuffer cache-line aligned"
//   #endif
// #else
//   SEGGER_RTT_PUT_CB_SECTION(SEGGER_RTT_CB_ALIGN(SEGGER_RTT_CB _SEGGER_RTT));
//   SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acUpBuffer  [BUFFER_SIZE_UP]));
//   SEGGER_RTT_PUT_BUFFER_SECTION(SEGGER_RTT_BUFFER_ALIGN(static char _acDownBuffer[BUFFER_SIZE_DOWN]));
// #endif__attribute__((section(".ARM.__at_0x20000000"))) SEGGER_RTT_CB _SEGGER_RTT;
__attribute__((section(".ARM.__at_0x200000B0"))) static char _acDownBuffer[BUFFER_SIZE_DOWN];
__attribute__((section(".ARM.__at_0x200000C0"))) static char _acUpBuffer[BUFFER_SIZE_UP]; 

但是發現還是不行,每次燒錄完芯片都要重新連接RTT,而且要很久,RTT每次都要搜索地址很費時間,搜索block后,分區都已經跳轉完畢,跳轉前的信息無法查看。最后需要RTT VIEWER中的地址為固定地址后就實時打印跳轉的信息了。
在這里插入圖片描述


結果:

測試后發現分區跳轉后可以打印,但是還是存在偶爾打印缺失的情況,查找后發現block中還有內容未被RTT VIEWER讀取就執行了跳轉,block里面的內容被重置,也就無法讀取了,在跳轉前判斷一下block是否還有內容就Ok了,跳轉的內容如下:

uint32_t *inputAddr;  // !聲明為全局變量,防止執行__set_MSP后,變量被釋放
uint32_t jumpAddr;    // !設置MSP后改變了棧底地址,導致原來的局部變量范圍出了新棧的空間,被系統釋放void JumpToCode(uint32_t addr) {inputAddr = (uint32_t *)addr;jumpAddr  = *(uint32_t *)(addr + 4);if ((*inputAddr & 0x2FFE0000) == 0x20000000) {// 等待rtt打印完畢 超時退出, rtt viewer中需要指定block地址,避免搜索地址耗費太長時間uint32_t start = HAL_GetTick();while (SEGGER_RTT_GetBytesInBuffer(0) > 0) {if (HAL_GetTick() - start > 100)break;}HAL_RCC_DeInit();HAL_DeInit();__set_FAULTMASK(1);__set_CONTROL(0);__set_MSP(*inputAddr);((void (*)(void))jumpAddr)();}
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PTA-城市間緊急救援

作為一個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連接城市的快速道路。每個城市的救援隊數量和每一條連接兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助電話給你的時候,你的任務是帶領你的…

采樣概率 假設檢驗推導數組最大值的方法與可行性

當需要尋找大量數據中的最大值的時候,比如從 2G 個 float16 中尋找其中的最大值,是一件耗時的操作。 現計劃通過小樣本來發掘數據的規律,對最大值進行預測。 方案: step1,從2G個float16 中截取64段float16&#xff…

【Vue入門篇】基礎篇—Vue指令,Vue生命周期

🎊專欄【JavaSE】 🍔喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。 🎆音樂分享【如愿】 🎄歡迎并且感謝大家指出小吉的問題🥰 文章目錄 🍔Vue概述🎄快速入門🌺Vue指令?v-…

AI繪畫工具匯總:免費、簡單易上手

歡迎來到魔法寶庫,傳遞AIGC的前沿知識,做有格調的分享? 喜歡的話記得點個關注吧! 提到AI繪畫,許多人通常會想到Midjourney和Stable Diffusion等工具,然而,這些工具對于新手而言門檻較高,不太友…

【C++】——標準模板庫STL作業(其一)

🎃個人專欄: 🐬 算法設計與分析:算法設計與分析_IT閆的博客-CSDN博客 🐳Java基礎:Java基礎_IT閆的博客-CSDN博客 🐋c語言:c語言_IT閆的博客-CSDN博客 🐟MySQL&#xff1a…

opencv使用pyinstaller打包錯誤:‘can‘t find starting number (in the name of file)

使用Python語言和opencv模塊在pycharm中編輯的代碼運行沒問題,但是在使用pyinstaller打包后出現錯誤can‘t find starting number (in the name of file) [ERROR:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-q3d_8t8e\opencv\modules\videoi…

安卓畢業設計基于安卓android微信小程序的家校通系統

運行環境 開發語言:Java 框架:ssm JDK版本:JDK1.8 服務器:tomcat7 小程序框架:uniapp 小程序開發軟件:HBuilder X 小程序運行軟件:微信開發者 項目介紹 基于微信小程序的家校通系統的設計基…

【實用】PPT沒幾頁內存很大怎么解決

PPT頁數很少但導出內存很大解決方法 1.打開ppt點擊左上角 “文件”—“選項” 2.對話框選擇 “常規與保存” (1)如果想要文件特別小時可 取消勾選 “將字體嵌入文件” (2)文件大小適中 可選擇第一個選項 “僅最入文檔中所用的字…

每日一題 1410. HTML 實體解析器(中等,模擬)

模擬&#xff0c;沒什么好說的 class Solution:def entityParser(self, text: str) -> str:entityMap {&quot;: ",&apos;: "",>: >,<: <,&frasl;: /,&amp;: &,}i 0n len(text)res []while i < n:isEntity Falseif …

Oracle-客戶端連接報錯ORA-12545問題

問題背景: 用戶在客戶端服務器通過sqlplus通過scan ip登陸訪問數據庫時&#xff0c;偶爾會出現連接報錯ORA-12545: Connect failed because target host or object does not exist的情況。 問題分析&#xff1a; 首先&#xff0c;登陸到連接有問題的客戶端數據庫上&#xff0c;…

高品質MP3音頻解碼語音芯片WT2003Hx的特征優勢與應用場景

在現代化科技快速發展的時代&#xff0c;高品質音頻語音芯片在各個領域的應用越來越廣泛。唯創知音推出的高品質MP3音頻語音芯片WT2003Hx&#xff0c;憑借其出色的特性與優勢&#xff0c;贏得了市場的廣泛認可。本文將詳細介紹WT2003Hx的特征優勢以及其在各個領域的應用場景。 …

單片機調試技巧--修改bin文件實現斷點

fromelf --text -a -c --outputall.dis F103_Moduel\F103_Moduel.axffromelf --bin --outputtest.bin F103_Moduel\F103_Moduel.axf 在啟動文件中&#xff0c;修改UsageFault_Handler UsageFault_Handler\PROC; get current contextTST lr, #0x04 ; if(!EXC_RETURN[2])ITE…

2014年08月25日 Go生態洞察:深入理解Go中的常量

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

高通OTA升級非常規分區方法

高通OTA升級非常規分區方法 1. 高通LE OTA背景2. 高通LE OTA升級方案2.1 SDX12 OTA方案2.2 OTA升級TZ/RPM/Aboot OTA是一個通用述語&#xff0c;常見的解釋為over the air。通過這一解釋&#xff0c;OTA最開始的概念&#xff0c;是空中升級。后來&#xff0c;又衍生出了FOTA&am…

中國智能汽車這一年,主打一個“卷”

文丨劉俊宏 “這才剛過去半年多&#xff0c;汽車行業又更新了一輪。”一位車評人在廣州車展感嘆道。 作為每年最后一個A級車展&#xff0c;廣州車展向來被視為中國車市的“風向標”。相比上海車展“擁抱汽車行業新時代”、成都車展“馭見未來”的主題&#xff0c;廣州車展“新…

數據結構(超詳細講解!!)第二十四節 二叉樹(上)

1.定義 二叉樹&#xff08;Binary Tree&#xff09;是另一種樹型結構。 二叉樹的特點&#xff1a; 1&#xff09;每個結點至多只有兩棵子樹&#xff08;即二叉樹中不存在度大于2的結點&#xff09;&#xff1b; 2&#xff09;二叉樹的子樹有左右之分&#xff0c;其次序…

python爬蟲教程:selenium常用API用法和瀏覽器控制

文章目錄 selenium apiwebdriver常用APIwebelement常用API 控制瀏覽器 selenium api selenium新版本(4.8.2)很多函數&#xff0c;包括元素定位、很多API方法均發生變化&#xff0c;本文記錄以selenium4.8.2為準。 webdriver常用API 方法描述get(String url)訪問目標url地址&…

分布式鎖之傳統鎖回顧(一)

1. 傳統鎖回顧 1.1. 從減庫存聊起 多線程并發安全問題最典型的代表就是超賣現象 庫存在并發量較大情況下很容易發生超賣現象&#xff0c;一旦發生超賣現象&#xff0c;就會出現多成交了訂單而發不了貨的情況。 場景&#xff1a; 商品S庫存余量為5時&#xff0c;用戶A和B同…

python:可迭代的數據類型、可變的數據類型、不可變的數據類型

python&#xff1a;可迭代的數據類型、可變的數據類型、不可變的數據類型 文章目錄 python&#xff1a;可迭代的數據類型、可變的數據類型、不可變的數據類型可迭代的數據類型可變的數據類型不可變的數據類型 可迭代的數據類型 序列&#xff1a;str、bytes、tuple、list非序列…

PC8223(CC/CV控制)高耐壓輸入5V/3.4A同步降壓電路內建補償帶恒流恒壓輸出

概述 PC8233&#xff08;替代CX8853&#xff09;是一款同步降壓調節器,輸出電流高達3.4A,操作范圍從8V到32V的寬電源電壓。內部補償要求最低數量現成的標準外部組件。PC8233在CC&#xff08;恒定輸出電流&#xff09;模式或CV&#xff08;恒定輸出電壓&#xff09;模式&#x…