ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多線程操作之間的關係

Table of Contents

1、SystemView 工具概覽

2、SEGGER 官網獲取 SystemView 工具

3、安裝 SystemView 工具

4、從 ESP32 上使用 SystemView 所需要的依賴

5、安裝工具 OpenOCD

6、在 ESP32 的 menuconfig 中使能 SystemView 的配置選項

7、運行程序,使用 OpenOCD 獲取 SystemView 能夠讀取的跟蹤文件

①首先要啓動 OpenOCD ,在添加了 PATH 的終端中 調用下面的命令

②再開一個終端 啓動 telnet 服務 進行調試

③啓動 ESP32 應用程序,記錄運行狀態

8、打開 SystemView 加載跟蹤文件進行分析


 

最近在學習 ESP32 的時候,一直在想,如果能有一個可以分析不同優先級的多個線程任務之間的關係的方法就好了。所幸 EPS32 本身已經支持了這樣的功能。配合來自 SEGGER 的 SystemView 工具,我們能夠方便的瞭解多線程運行的時候,各個線程之間的切換情況。

使用一個SEGGER J-Link和實時傳輸技術(RTT),SystemView可以連續的記錄數據,並實時的分析和展現這些數據。
SystemView可以分析中斷、任務和軟件定時器已經執行了多久,何時和它們使用了多長時間。它揭示了在某個命令中的發生了什麼,哪個中斷觸發了任務切換,中斷和任務調用了哪個底層RTOS的API函數。
可以執行週期精確的分析,甚至可以對用戶功能進行計時。

今天我就來嘗試使用這個方便的小工具。

好,那麼下面這篇博客按準備走流程的方式組織。

 

1、SystemView 工具概覽

SystemView 工具打開時候的樣子如下圖所示,它能夠幫助我們分析系統中各個線程之間的關係。

下面是從 bjr2016 博主博客上摘抄下來的官網譯文,它詳細的介紹了什麼是 SystemView :

SystemView 是一個用於虛擬分析嵌入式系統的工具包。SystemView 可以完整的深入觀察一個應用程序的運行時行爲,這遠遠超出一個調試器所能提供的。這在開發和處理具有多個線程和事件的複雜系統時尤其有效。

SystemView 由兩個部分組成:

SystemView 的PC端程序,用於收集目標板上傳的信息。

SystemView 嵌入式端程序可以分析嵌入式系統的行爲。它記錄嵌入式系統產生的監視數據,並在不同的窗口中顯示這些信息。這些記錄可以保存到文件中,用於以後的分析或者編寫文檔。
————————————————
版權聲明:本文爲CSDN博主「bjr2016」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/bjr2016/article/details/78474097

 該博主「bjr2016」有詳細的關於 SystemView 官網使用說明的譯文,根據本文搭建好 ESP32 上的 SystemView 所需環境之後可以參考他的譯文說明進行下一步分析的學習。【For English native language readers, you can just Visit the official website:https://www.segger.com/downloads/free-utilities/UM08027  】

 

2、SEGGER 官網獲取 SystemView 工具

我們可以訪問 SEGGER 的官網【 https://www.segger.com/products/development-tools/systemview/  】找到 SystemView 的下載鏈接,我們要選擇對應的系統的安裝包,我這裏使用的是 Linux 版本的 x64 位系統的 deb 安裝包,也可以選擇使用 Windows 系統開發配合 Windows 對應的安裝包。

 

3、安裝 SystemView 工具

下載的 deb 安裝包直接雙擊打開,點擊 Install 就可以安裝了。安裝好之後可以在終端中輸入 SystemView 啓動程序。

4、從 ESP32 上使用 SystemView 所需要的依賴

IDF 具有生成與 SystemView 兼容的跟蹤所需的所有代碼,因此用戶只需配置必要的項目選項(請參見上文),構建,下載映像到目標並使用 OpenOCD 收集數據即可。

這裏需要說明的是,ESP32 開發板並不能使用 SystemView 自帶的 Start Recording 來啓動調試和錄製,跟蹤過程目前也不能使用該工具進行控制。需要配合 OpenOCD 來獲取 SystemView 可以讀取的文件,然後才能夠使用該工具進行分析。所以在 ESP32 上使用 SystemView 還需要安裝 OpenOCD 調試工具。

 

5、安裝工具 OpenOCD

如果你使用 ESP-IDF v4.0 以上版本,可以使用 esp-idf 目錄下 install.sh 進行安裝,該安裝會自動完成 OpenOCD 的安裝過程!!!!!

在 Terminal 中輸入 ./install.sh 就可以完成 OpenOCD 的安裝 安裝完成之後輸入 . ./export.sh 就可以在添加相關的 PATH

machine:~/esp/esp-idf$ ./install.sh
machine:~/esp/esp-idf$ . ./export.sh

這裏需要注意的是,在終端中輸入 . ./export.sh 來添加 PATH 的方式只能在當前 Terminal 中有效。如果切換了終端需要在 esp-idf 路徑下重新執行。這裏建議使用 alias 對這條指令進行進行化名,方便在不同的終端中快速調用這個工具。比如在用戶目錄下的 .bashrc 文件中添加:

alias get-idf='. /home/you_name/esp/esp-idf/export.sh'

添加之後,只需在終端中調用 get-idf 就完成了 PATH 配置。

machine:~$ get-idf

 

舊版本的 IDF 可以參考我之前的博客安裝 OpenOCD。【https://blog.csdn.net/gengyuchao/article/details/100125888

 

6、在 ESP32 的 menuconfig 中使能 SystemView 的配置選項

 

通過 Component config > Application Level Tracing > FreeRTOS SystemView Tracing (CONFIG_SYSVIEW_ENABLE)  這個菜單配置選項來啓用對此功能的支持。

官網原文:

Support for this feature is enabled by Component config > Application Level Tracing > FreeRTOS SystemView Tracing (CONFIG_SYSVIEW_ENABLE) menuconfig option.

 

7、運行程序,使用 OpenOCD 獲取 SystemView 能夠讀取的跟蹤文件

①首先要啓動 OpenOCD ,在添加了 PATH 的終端中 調用下面的命令

openocd -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg

如果沒有在系統中給 USB 口授權 OpenOCD 可能會啓動失敗。解決方法如下:

補充:openocd需要使用usb,需要把( idf 4.0 )  .espressif/tools/openocd-esp32/v0.10.0-esp32-20190708/openocd-esp32/share/openocd/contrib/60-openocd.rules  文件拷貝到 /etc/udev/rules.d ,這樣openocd就有使用usb調試設備的權限了(配置完成後需要重啓生效)

舊版本請參考我之前的博客【https://blog.csdn.net/gengyuchao/article/details/100125888

啓動的效果如下:

②再開一個終端 啓動 telnet 服務 進行調試

telnet localhost 4444

 在這個終端下可以輸入命令

esp32 sysview start file://pro-cpu.SVDat file://app-cpu.SVDat

就像這樣,敲下回車之後就能在 用戶目錄下生成 pro-cpu.SVDat 和 app-cpu.SVDat 文件了,這兩個文件分別記錄了在 ESP32 上運行的兩個 CPU 中的程序,在系統中中斷、任務和軟件定時器已經執行了多久,何時和它們使用了多長時間。這兩個文件能夠被 SystemView 軟件直接加載打開。

使用界面如下:

其他可以使用的命令可以參考 espressif 官網,這裏有詳細的介紹:https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/app_trace.html#app-trace-system-behaviour-analysis-with-segger-systemview

③啓動 ESP32 應用程序,記錄運行狀態

打開上面兩個程序之後,我們就可以運行我們自己編寫的 ESP32 程序了,OpenOCD 會如實的記錄下我們程序的運行狀態。

 

8、打開 SystemView 加載跟蹤文件進行分析

當我們的程序結束後,我們就可以關掉程序和 OpenOCD 工具了,接下來可以直接使用 SystemView 工具打開我們之前的記錄文件進行分析。

比如這樣:

使用這個工具我們可以輕鬆的看到一個時間線,我們每個任務的運行流程、所佔時間、任務切換情況都很明白的顯示在上面。我們可以根據這些信息分析我們的任務是否按照自己的期望在運行。

至此 SystemView 的環境搭建就已經完成。

 

好啦,夜已深,今天的記錄就到這裏吧,希望能夠對大家有所幫助。歡迎大家給我點贊關注、與我交流討論呀。O(∩_∩)O哈哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章