在RTOS應(yīng)用的設(shè)計(jì)過(guò)程中,由于任務(wù)調(diào)度切換是由RTOS任務(wù)調(diào)度器來(lái)管理的,RTOS應(yīng)用的源代碼并不能完全反映多任務(wù)系統(tǒng)運(yùn)行時(shí)的實(shí)時(shí)行為,多任務(wù)系統(tǒng)的實(shí)時(shí)行為還取決于任務(wù)、中斷、輸入和他們的相互作用。因此RTOS應(yīng)用的實(shí)時(shí)行為對(duì)于開發(fā)者而言并不是非常直觀的,此時(shí)就可以用到SystemView這樣的RTOS可視化分析工具來(lái)幫助分析應(yīng)用的實(shí)際執(zhí)行過(guò)程。
SystemView是SEGGER公司開發(fā)的嵌入式系統(tǒng)可視化分析工具,提供了對(duì)應(yīng)用程序的完整洞察,包括時(shí)間軸、CPU負(fù)載、運(yùn)行時(shí)間信息、上下文運(yùn)行時(shí)信息等可視化窗口,能夠幫助開發(fā)者獲得對(duì)應(yīng)用運(yùn)行時(shí)行為的深入理解。SystemView支持μC/OS-II、μC/OS-III、FreeRTOS、embOS和無(wú)OS的裸機(jī)系統(tǒng)。
本文將基于STM32F767ZI_Nucleo開發(fā)板的μC/OS-IIII官方移植例程來(lái)介紹如何使用Segger SystemView,包含設(shè)備端SystemView相關(guān)應(yīng)用代碼的添加和PC端SystemView軟件的設(shè)置,使用到的μC/OS-III版本是V3.07.03版本。STM32F767ZI_Nucleo開發(fā)板板載的ST-Link可以使用Seggger提供的STLinkReflash軟件將固件更新為J-Link,SystemView支持3種工作模式,持續(xù)記錄模式下SystemView可以在目標(biāo)程序運(yùn)行時(shí)實(shí)時(shí)地記錄目標(biāo)執(zhí)行情況,本文將使用板載的J-Link調(diào)試器和SEGGER實(shí)時(shí)傳輸技術(shù)(RTT)來(lái)演示如何使用SystemView跟蹤μC/OS-III。
01目標(biāo)設(shè)備端添加SystemView和RTT的實(shí)現(xiàn)代碼
(1)要使用SEGGER SystemView,首先要把SystemView和RTT源碼文件加到目標(biāo)應(yīng)用工程,SystemView和RTT的源碼包在PC端SystemView軟件的安裝目錄下有提供。
源碼部分包含3個(gè)部分:
1)SystemView和RTT實(shí)時(shí)傳輸技術(shù)的配置文件:可能需要根據(jù)應(yīng)用需求進(jìn)行一定的修改。
2)SystemView和RTT技術(shù)的具體實(shí)現(xiàn)源碼:通常不需要修改這里的文件。
3)用于多種類型OS及不同版本OS所對(duì)應(yīng)的接口文件:根據(jù)應(yīng)用實(shí)際情況選擇對(duì)應(yīng)接口文件,本文中我們選擇添加uC/OS-III目錄下對(duì)應(yīng)的文件。
將前面提到的配置文件、RTT實(shí)現(xiàn)源碼及OS接口文件加入到工程中后,工程中包含的文件如下,注意還需要在IDE中設(shè)置新添加的這些C文件和匯編代碼文件的包含路徑。
(2)進(jìn)行一些和SystemView相關(guān)的配置
?在os_cfg.h文件中將uC/OS-III的跟蹤功能設(shè)置為1開啟。
#define OS_CFG_TRACE_EN 1u
?在應(yīng)用代碼main.c文件中添加頭文件包含
#include "os_trace.h"
?在os_cfg_trace.h中配置任務(wù)和其他內(nèi)核對(duì)象的最大數(shù)量
在SEGGER_SYSVIEW_Config_uCOSIII.c文件中配置系統(tǒng)的時(shí)鐘頻率,時(shí)間戳計(jì)數(shù)器頻率以及芯片RAM內(nèi)存的基地址,如果工程使用HAL庫(kù),可以使用HAL庫(kù)中提供的函數(shù)返回這些參數(shù)值。
?在SEGGER_SYSVIEW_Conf.h中設(shè)置事件緩存的大小
#define SEGGER_SYSVIEW_RTT_BUFFER_SIZE 1024
這里的緩存空間大小需要根據(jù)你所使用的J-Link的調(diào)試接口速率,以及所記錄的事件數(shù)量來(lái)決定,當(dāng)J-Link速率低,或者記錄的事件較多時(shí)需要設(shè)置更大的緩存空間。使用SystemView Single-Shot模式時(shí)應(yīng)加大內(nèi)存以盡可能的記錄更長(zhǎng)時(shí)間。
(3)在任務(wù)創(chuàng)建前調(diào)用SystemView的初始化函數(shù)
在完成芯片的硬件初始化后,uC/OS任務(wù)創(chuàng)建前調(diào)用OS_TRACE_INIT()函數(shù)來(lái)初始化SystemView。
02PC端SystemView軟件的安裝和設(shè)置
PC端SystemView軟件可以在Segger官網(wǎng)進(jìn)行下載。
(1) 要利用J-link實(shí)現(xiàn)SystemView持續(xù)記錄,需要在SystemView軟件里的Target->Recorder Configuration選項(xiàng)中設(shè)置目標(biāo)設(shè)置芯片型號(hào)、目標(biāo)調(diào)試接口類型(JTAG/SWD)和接口速度。
RTT控制塊的地址檢測(cè)選擇Auto,通常情況下由J-Link自動(dòng)搜索即可檢測(cè)成功。
(2)Recorder Configuration設(shè)置完成后,點(diǎn)擊Target->Start Recording選項(xiàng)即可開始跟蹤記錄,在演示中使用到了J-Link,默認(rèn)使用的跟蹤模式是持續(xù)記錄模式,此時(shí)跟蹤的開啟和停止將由PC端的SystemView軟件來(lái)控制。
進(jìn)入跟蹤后可以得到如圖6所示的可視化跟蹤視圖,每一欄代表應(yīng)用中的中斷或者Task,按優(yōu)先級(jí)從高到低排列,圖6直觀的展現(xiàn)了RTOS應(yīng)用中發(fā)生任務(wù)搶占的情形,低優(yōu)先級(jí)的DemoTask任務(wù)執(zhí)行過(guò)程中被高優(yōu)先級(jí)的TestTask任務(wù)搶占。
借助SystemView這樣的可視化分析工具,可以幫助開發(fā)者更好的了解RTOS應(yīng)用的實(shí)時(shí)行為,進(jìn)而創(chuàng)造更高質(zhì)量的代碼。本文演示中使用的STM32F767ZI_Nucleo開發(fā)板的uC/OS-III官方移植例程可以在如下鏈接中進(jìn)行下載。
審核編輯:湯梓紅
-
SystemView
+關(guān)注
關(guān)注
5文章
53瀏覽量
24829 -
RTOS
+關(guān)注
關(guān)注
24文章
839瀏覽量
120715 -
源代碼
+關(guān)注
關(guān)注
96文章
2950瀏覽量
67812
原文標(biāo)題:如何使用SystemView跟蹤分析μC/OS-III?
文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論