日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过printf从目标板到调试器的输出

發布時間:2024/7/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过printf从目标板到调试器的输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在SEGGER的博客上看到Johannes Lask寫的一篇關于在調試時使用printf函數從目標MCU輸出信息到調試器的文章,自我感覺很有啟發,特此翻譯此文并推薦給各位同仁。當然限于個人水平,有不當之處懇請指正。原文網址:https://blog.segger.com/getting-printf-output-from-target-to-debugger/

?Erich Styger最近發布了一篇《關于如何使用ARM Cortex-M目標上的單線輸出(SWO)添加控制臺功能》的偉大教程。

這激發了我寫一篇在嵌入式目標(包括SWO和RTT)上的調試輸出(“printf”)實現的更普遍的文章。

從目標調試輸出

有不同的方法來從目標應用程序獲取調試輸出。

自從早期嵌入式系統以來,已經有了硬件依賴的解決方案,如使用UART或USB CDC。但是應用程序可能已經使用了UART,CDC需要目標硬件上的USB堆棧和USB連接器。

第一個軟件解決方案是semihosting。使用semihosting,CPU停止打印輸出,并由調試器重新啟動“幕后”操作。打印一個消息可能需要幾毫秒到幾百毫秒的時間,因為這是一個昂貴的操作。調試器需要意識到目標已經停止執行,讀取寄存器和內存,寫入內存,然后重新啟動CPU。這意味著目標CPU在這段時間內不運行。因此,semihosting可以簡單地不用于需要實時行為的應用,例如通信棧。另外,semihosting實現是依賴于調試器的,而使用semihosting的應用程序可能在沒有連接調試器的情況下運行。

然后還有ARM的SWO跟蹤端口和SEGGER的實時傳輸(RTT)。

單線輸出

SWO是由ARM為Cortex-M3,M4和M7設備設計的單引腳接口。引腳可以使用標準調試連接器連接到調試探頭,并與SWD接口(而不是JTAG)一起使用。目標MCU可以在CPU引腳上傳輸數據包,類似于UART TX引腳,時鐘速率來自CPU時鐘。在調試器上設置SWO需要知道CPU時鐘速度。如果應用程序的某些部分在啟動前必須在初始化之前進行輸出,或者在應用程序運行時時鐘速度發生變化,那么這一點尤為重要。SWO不會如semihosting發送輸出那樣停止CPU。通過SWO的輸出速度取決于組態的SWO速度。數據分組,即調試輸出分組,以特殊格式編碼。這允許發送多達32個數據包類型(刺激),但也會導致一些協議開銷,這將以10 MHz SWO速度將事情減慢到?1.5 us / char。這意味著輸出80個字符大約需要120個微秒。要在RTOS或中斷程序中使用來自多個任務的SWO,在SWO輸出期間應禁用中斷,這可能會影響系統的實時行為。

盡管SWO最常用于打印調試消息。它也可用于記錄中斷進入/退出和功能進入/退出,定期對PC值或內存中的變量進行采樣,或者用于事件通知。

Erich全面介紹了如何在調試消息中使用SWO,如何在目標上進行設置,以及如何在主機上獲取輸出。

實時傳輸

RTT是SEGGER的調試終端解決方案。它將SWO的優點與其他方法的特點相結合。RTT是一種僅用于軟件的解決方案,而不是標準調試連接以外的目標設備上不需要額外的硬件。它可以與任何J-Link一起使用,即使使用諸如J-Link OB,OpenSDA或轉換的ST-LINK等小型板載機型。

RTT允許非常高的傳輸速度,而不會影響目標的實時行為。沒有協議開銷,打印消息可以在一微秒或更短的時間內完成,基本上只需要做一個單個memcpy()的時間。由于RTT的速度非常快,所以輸出可以通過鎖定中斷來保證線程安全,而這種中斷對系統的實時行為影響最小。當目標應用程序正在運行時,輸出消息由J-Link讀取并傳輸到主機。

與UART類似,RTT是雙向的。您可以從主機向目標應用程序發送輸入。雙向通信允許您控制目標系統,而無需任何其他輸入設備。使用RTT可以實現全功能終端。

RTT實現源代碼可以自由地在任何系統中使用,提供功能和自由。

在主機上使用RTT是靈活并且容易的。J-Link軟件包括可以與任何調試工具并行使用的RTT Viewer,一個GUI。您還可以使用Telnet客戶端連接到調試會話(端口19031)并與目標進行通信。一些調試器甚至直接集成RTT。Embedded Studio和獨立調試器Ozone可以在其終端窗口中通過RTT顯示目標輸出,并且不需要任何其他工具。

概要

printf調用與不同實現的速度比較

在從嵌入式目標執行SWO調試輸出之前,只能使用低效或依賴硬件的方法。

使用SWO ARM設計了一個快速的解決方案。它重量輕且快速,但具有一些縮寫,因為它僅在某些Cortex-M器件上可用,需要額外的引腳連接到MCU,并且是單向的。

RTT結合了SWO的所有優點,并增加了更多功能。它比SWO更快,不僅限于Cortex-M,允許通過標準調試連接進行雙向通信,并且在任何需要系統的實時情況下都是最不具有干擾性的。

當您可以使用RTT時,沒有任何理由使用SWO。

歡迎關注:

總結

以上是生活随笔為你收集整理的通过printf从目标板到调试器的输出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。