trace
概述
SystemView 是一個用于分析嵌入式系統(tǒng)性能的trace工具。SystemView可以分析系統(tǒng)中有哪些中斷、任務執(zhí)行了,以及它們的先后關系。 可以完整的深入觀察一個應用程序運行時的行為,它揭示了在任務運行中發(fā)生了什么,哪個中斷觸發(fā)了任務切換,中斷和任務調(diào)用了哪個底層系統(tǒng)的API函數(shù)。SystemView 不但可以實時分析和展示數(shù)據(jù),而且可以幫助用戶進行系統(tǒng)調(diào)試和問題診斷,尤其是在開發(fā)和處理具有多個任務的復雜系統(tǒng)時。
SystemView 由兩個部分組成:
SystemView 嵌入式端程序:用于記錄嵌入式系統(tǒng)的行為,通過實時傳輸(Real Time Transfer, RTT)技術將記錄的數(shù)據(jù)通過J-link工具傳輸?shù)絇C機上。
SystemView PC端程序:用于收集目標板上傳的數(shù)據(jù)信息,并在不同的窗口中顯示這些信息。這些記錄可以保存到文件中,用于以后的分析。
版權信息
Apache license v2.0
目錄結構
├── Config
│ ├── Global.h # Global 數(shù)據(jù)類型定義
│ ├── SEGGER_RTT_Conf.h # SYSTEMVIEW RTT配置文件
│ ├── SEGGER_SYSVIEW_AliOSThings.c # SYSTEMVIEW AliOSThings 適配代碼
│ ├── SEGGER_SYSVIEW_Conf.h # SYSTEMVIEW配置文件
│ ├── SEGGER_SYSVIEW_Config_AliOSThings.c # SYSTEMVIEW AliOSThings 相關配置
│ └── SYSVIEW_AliOSThings.txt # SEGGER SYSTEMVIEW PC端配置文件
├── SEGGER
│ ├── SEGGER.h
| ├── SEGGER_RTT.c # SEGGER RTT 模塊源代碼
| ├── SEGGER_RTT.h # SEGGER RTT 模塊頭文件
| ├── SEGGER_SYSVIEW.c # SEGGER SYSTEMVIEW 模塊源代碼
| ├── SEGGER_SYSVIEW.h # SEGGER SYSTEMVIEW 模塊頭文件
| ├── SEGGER_SYSVIEW_ConfDefaults.h # SEGGER SYSTEMVIEW 默認配置頭文件
| ├── SEGGER_SYSVIEW_Int.h # SEGGER SYSTEMVIEW 內(nèi)部頭文件
| ├── SEGGER_RTT_printf.c # SEGGER RTT 模塊 printf 源代碼
│ └── SEGGER_RTT_ASM_ARMv7M.S # 針對Cortex-M 優(yōu)化RTT模塊
├── k_trace.c # 核心邏輯代碼
├── uart_send.c # 用串口傳輸數(shù)據(jù)的示例代碼
├── README.md # 說明文檔
└── package.yaml # 編譯配置文件
依賴組件
無
常用配置
系統(tǒng)中相關配置已有默認值,如需修改配置,統(tǒng)一在package.yaml中def_config節(jié)點修改,具體如下:
RTT 緩存大小,默認1024, 可修改為4096,修改YAML配置如下:
def_config:
SEGGER_SYSVIEW_RTT_BUFFER_SIZE: 4096
更多配置可以參考SystemView用戶手冊第4.5章 Generic configuration
API說明
使用 SEGGER_SYSVIEW_PrintfTarget API通過J-link打印log 信息到時序圖和Terminal窗口。
void SEGGER_SYSVIEW_PrintfTarget(const char *s, ...);
例子:SEGGER_SYSVIEW_PrintfTarget("hello world! count %d \r\n", count);
更多的API說明參考SystemView用戶手冊第7章 API reference
使用示例
將HaaS100 SWDIO、SWCLK和地GND共3根線與J-Link仿真器連接。
HaaS引腳編號 | HaaS引腳說明 | J-link引腳說明 | J-link引腳編號 |
41 | SWCLK | CLK | 9 |
42 | SWDIO | TMS | 7 |
40 | GND | GND | 8 |
硬件連接圖:
組件使用示例相關的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發(fā)工具,所以首先需要參考《AliOS Things集成開發(fā)環(huán)境使用說明之搭建開發(fā)環(huán)境》,下載安裝。待開發(fā)環(huán)境搭建完成后,可以按照以下步驟進行示例的測試。
步驟1 創(chuàng)建或打開工程
打開已有工程
如果用于測試的案例工程已存在,可參考《AliOS Things集成開發(fā)環(huán)境使用說明之打開工程》打開已有工程。
創(chuàng)建新的工程
組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運行,這里選擇helloworld_demo案例。helloworld_demo案例相關的源代碼下載可參考《AliOS Things集成開發(fā)環(huán)境使用說明之創(chuàng)建工程》。
步驟2 添加組件
案例下載完成后,需要在helloworld_demo組件的package.yaml中添加對組件的依賴:
depends:
- trace: dev_aos # helloworld_demo中引入trace組件
步驟3 下載組件
在已安裝了的開發(fā)環(huán)境工具欄中,選擇Terminal -> New Terminal啟動終端,并且默認工作路徑為當前工程的workspace,此時在終端命令行中輸入:
aos install trace
上述命令執(zhí)行成功后,組件源碼則被下載到了./components/trace路徑中。
步驟4 添加示例
修改文件solutions/helloworld_demo/helloworld.c
添加頭文件
#include "SEGGER_SYSVIEW.h"
將
printf("hello world! count %d \r\n", count++);
改為;
SEGGER_SYSVIEW_PrintfTarget("hello world! count %d \r\n", count++);
步驟5 編譯固件
在示例代碼已經(jīng)添加至組件的配置文件,并且helloworld_demo已添加了對該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成后,可參考《AliOS Things集成開發(fā)環(huán)境使用說明之燒錄固件》來燒錄固件。
步驟7 打開串口
固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之查看日志》。
當串口終端打開成功后,可在串口中輸入help來查看已添加的測試命令。
步驟8 測試示例
1 下載安裝SystemViewSystemView下載地址
根據(jù)你所用的操作系統(tǒng)下載對應版本的SystemView,然后進行安裝。
2 配置SystemView
拷貝components/trace/Config/SYSVIEW_AliOSThings.txt文件到PC機SystemView軟件安裝目錄 C:\Program Files\SEGGER\SystemView\Description下。
3 打開SystemView PC軟件點擊菜單欄Target打開 Recorder Configuration。
參考下圖配置參數(shù)信息,其中 Address 信息可以從開機串口log 中獲取:例如開機串口log中顯示:_SEGGER_RTT:0x34683a1c。
4 開始采集
點擊菜單欄Target打開 Start Recording
采集效果界面顯示如下:
注意
如果SystemView PC端軟件提示overflow,可以通過修改package.yaml 文件增大設備端緩存大小。
修改方式如下:
def_config: 下添加一行SEGGER_SYSVIEW_RTT_BUFFER_SIZE: 4096