轉自: http://www.armbbs.cn/forum.php?mod=viewthread&tid=95855&highlight=Ozone
最近剛“忽悠”領導買了個J-Trace Pro,順便上Segger網上看了看Jtrace的相關介紹官網介紹
Segger為Jtrace搭配了一塊小的測試板,主控是STM32F407VG(100pin),而且也給出了簡單的上手視頻。並推薦了自家的調試軟件Ozone(不包含編譯功能,僅能調試,編譯的話有自家的SES)。
其實之前也下載過Ozone,不過也僅限於嘗鮮性質的試玩。這次因為購買的Jtrace具備了Trace功能,恰好這兩天有點時間,把Ozone的功能基本徹底的試用了一遍。
雖然Ozone感覺在我的系統(S家這點做得比較好,不論是IDE工具還是Ozone這種調試器,都是全平台支持的)上不太穩定(WIN 10 x64教育版),經常死機,但總的來說,感覺還是一款很有自己特色的調試軟件,尤其搭配自家調試器(貌似也只能搭配自家……)。所以決定把這些東西寫出來大家一起溜溜,寫出來可能只能給小白掃掃盲(大神繞道),里面肯定也有各種錯誤,歡迎拍磚。
從官網下載安裝完畢后,需要導入IDE工具生成的相關鏡像文件,建議導入elf、axf這種包含更多信息的鏡像(官網就有例程可以直接下載導入);同時建議將鏡像文件和工程文件夾放在一起的話,Ozone可以將鏡像對應的源文件都可以顯現出來。
Ozone的調試功能比較多,我大概划分了3個分類:
A、基本功能:使用和諧版Jlink在Ozone上,或者其他調試器在其他IDE工具上也能實現的基本功能
B、跟蹤功能:J-Trace所具有的跟蹤功能
C、特殊功能:Ozone所具有的我在IAR和ES、Keil上沒見過(當然很可能也是不知道有……)的功能
A、基本功能:在基本功能下,我使用J-Trace時是關閉了Trace功能的,同時我也拿了一個“大家都有便宜的”的Jlink 實驗了下也沒問題
點下Ozone中的View列表,會出現以下窗口,其中基本功能的窗口如下圖,我做了個編號(為顯示方便分為兩組,012為1組,1319為一組),和后圖會對應上。基本上Ozone對應的所有能都在這個View能夠提供的列表功能里面。調試器嘛,畢竟可以設置的地方(功能)會少一些
直接拿S家官網上的例程跑了下(S家官網的例程是帶自家系統embOS的,沒有用過……),我把上圖的所有功能都展開了,方便看到窗口的實際樣式。后面根據窗口的特點做簡要描述:
0、文件窗口:
這個沒啥可多說的,把工程文件夾的最后實際參與編譯的c、文件可以顯示出來,和其他家IDE工具不同,Ozone是直接將每行C語句都反匯編放下該語句的下方的
1、斷點(追蹤窗口):
因為現在還沒有加入追蹤功能,所以如果僅僅是斷點(程序斷點和數據斷點的話,和keil下也沒啥區別)。
斷點的一些進階功能可以參考下這篇帖子
《原來單片機中還隱藏了這些調試技巧 | 顛覆認知》---作者魚鷹 EmbeddedOsprey
https://blog.csdn.net/weixin_42876465/article/details/97823112
這篇帖子是基於Keil的,我試了下,Ozone的邏輯也差不多。在這個窗口中,會有部分中斷向量的斷點,應該是這個工程使用了S家自己定義的啟動文件才會有,我使用armfly工程包或者自己建立的一些工程就沒有這些選框
2、Call Stack窗口:
對比Keil的Call Stack&Locals(keil是將這兩個窗口放到一起的),Ozone的Call界面顯示的東西會多一些,還顯示了發揮地址和PC指針,棧使用量等參數
3、反匯編窗口:
和keil也沒有什么區別,不過因為Ozone在0文件窗口就支持直接看到反匯編的內容,所以對於Ozone這個窗口的作用可能會變小一些了
4、全局變量窗口:
這個功能我沒有在keil中看到過,不過感覺還挺好用的,將實際編譯進鏡像的所有全局變量全部顯示出來,因為STM32的所有全局變量都是有固定內存地址的,所以內存地址、數據類型、以及定義所在文件,都可以直觀顯示出來。
同時右鍵還可以將這些全局變量添加到數據斷點,添加數據曲線等窗口,也可以在源文件、當前運行Memory(注意這個操作應該是Show Data)等窗口中顯示出來。
5、局部變量窗口:
這個沒啥可說的,跑進一個函數斷點后看到這個函數內部所有局部變量的情況(一般的做法都是把需要觀察的局部變量添加到手動變量窗口了,編號8窗口)
8、手動添加變量窗口:
除了變量以外,還可以添加函數,不過只貌似顯示函數的所在地址,Ozone可以單獨給每個需要觀察的內容設定刷新率,Keil的話,我只會設置Peridodic Window Update,周期感覺1s?
6、Memory窗口:
Ozone比Keil下的常規操作會多支持Save 和 Load甚至Fill(個人感覺Load和Fill的作用不太大吧,畢竟更改這些地方,對程序影響太大了)。有個好評的地方在與,Ozone可以直接通過在寄存器或者變量窗口直接右鍵Show Data就可以看到變量甚至寄存器的Memory狀態。對理解MCU來說,感覺還是很有用的。
7、寄存器窗口:
與其他IDE沒有什么不同,不過比較奇怪的一點是,Ozone支持的STM32一些內核的寄存器(比如DPB、或者DWT等)ST官方手冊都沒有仔細些,ARM的一些Core的手冊才給出的寄存器。反而在Keil下沒有找到這些寄存器的選項。
9和10都是動態的曲線,上一個Gif的圖大家可以直觀感受一下
9、數據曲線窗口;
一個基於橫軸時間、縱軸變量值(or 變量計算值)的曲線。可以設定變量的采樣率和基於變量的計算表達式
Ozone的表達式支持類型
10、功耗曲線窗口:
功耗測試曲線和和數據曲線類似,如果使用Jlink或者Jtrace的5V-Supply給目標板供電,都可以被Ozone進行檢測,並同步將消耗的電流顯示出來。這樣有個作用就是可以查看目標板在執行到哪里的時候功耗最大(或者與預期是否一致等)。不過希望Ozone能做一個功耗觸發的功能,就是PC端測量到電流達到某個閾值后,立刻通過調試口讓目標程序停下來,方便直接定位預期電流消耗的程序位置。
不太好的一點是,最大提供電流僅僅是300mA,比隔壁IAR 的I-jet Trace Arm的600mA要小不少。
11、OS支持窗口:
我OS用的很少,embOS更是第一次跑(Ozone官方例程里使用的是自家的OS)。Ozone的RTOS支持目前只有embOS、FreeRTOS還有一個ChibiOS。看介紹都是基於插件來實現的。ChibiOS我也是第一次聽說,不過試用了下FreeRTOS,感覺功能比embOS的要少一些。不知道是使用FreeRTOS版本匹配問題,還是本身支持力度的問題。
12、控制台窗口:
Ozone項目文件是用腳本語言編寫的C文件,各種操作,實際上也是基於命令實現的,通過控制台窗口可以很好的觀察到每個執行的命令。同時基本所有設置也都可以通過命令的方式來進行下發,不知道這樣對於從高層次往底層搞開發的人來說會更方便。控制台打“?”可以看到所有命令的介紹。
第二組:除了Terminal窗口外,其他的窗口都是Static靜態的,也就是編譯結束后,就已經固定不變了。
13、終端窗口:
終端打印我使用的很少,所以貼一張Ozone手冊的介紹吧。基本上就是用了S家自帶的RTT技術,或者SWO功能。其中寫到一個Semihosting,沒看懂有啥用……
14、調用窗口:
可以看到編譯后工程之間的函數調用關系,和調用深度等相關內容,比較直觀。
這是一個靜態的程序圖框,用於描述函數、子函數之間的相互引用關系以及所占用的堆棧量、代碼總量、調用深度等
有點類似於keil中的htm(Obj過程文件中)文件的描述
12+96 = 108;108+24 =132;出現的+;是因為出現了fp-call,所以對應的depth里面會有FP,也會有“+”
15、查詢窗口:就不貼圖了,沒啥可說的。Ctrl+F的記錄
16、函數窗口:
功能沒啥可說的, 就是被編譯的所有函數的集合。再次表揚下Ozone的這個Filter Bar的這個功能,方便查找,Fliter Bar在很多窗口里面都有的
17、Memory占用窗口:
S家好像對這種條狀圖來表達RAM和Flash占用的方式有點執念。之前S家IDE工具ES中也會給出一個條狀圖
18、源文件窗口:
包含被編譯的c文件、頭文件。其中有程序大小,指令數,位置和狀態(編譯、包含、外部調用)。
19、Jlink/Trace控制面板窗口:
通過usb訪問一個虛擬的服務器,可以對Jlink做對應的設置。和裝上Jlink驅動后的Command的命令行方式類似吧
本主題由 eric2013 於 2019-12-5 17:08 審核通過