SystemView是嵌入式系統(tǒng)可視化分析工具,提供了對應(yīng)用程序的完整洞察,包括時間軸、CPU負(fù)載、運(yùn)行時間信息、上下文運(yùn)行時信息等可視化窗口,能夠幫助開發(fā)者獲得對應(yīng)用運(yùn)行時行為的深入理解。支持μC/OS-II、μC/OS-III、FreeRTOS、embOS和無OS的裸機(jī)系統(tǒng)分析,深入地了解應(yīng)用。
對無OS的應(yīng)用,SystemView除了將整個系統(tǒng)視為idle空閑分析方式外,還可以通過任務(wù)方式檢測系統(tǒng)運(yùn)行時行為。
具體集成步驟如下:
1、在Embedded Studio中為使用的設(shè)備創(chuàng)建一個新項(xiàng)目
2、將SystemView安裝目錄下的/SEGGER、/Config文件夾中的所有文件和Sample/NoOS/Config/Cortex-M/SEGGER_SYSVIEW_Config_NoOS.c代碼文件添加到項(xiàng)目中
3、在main.c中包含SEGGER_SYSVIEW_Conf.h和SEGGER_SYSVIEW.h
#include "SEGGER_SYSVIEW_Conf.h"
#include "SEGGER_SYSVIEW.h"
4、修改SEGGER_SYSVIEW_Conf.h中的SEGGER_SYSVIEW_ID_BASE為0x0
#define?SEGGER_SYSVIEW_ID_BASE ????????0x00000000 ???
5、在SEGGER_SYSVIEW_Config_NoOS.c中,包含stdio.h和string.h文件
#include
#include
添加一個SEGGER_SYSVIEW_OS_API指針,?
static const SEGGER_SYSVIEW_OS_API _NoOSAPI = {NULL, _cbSendTaskList};
創(chuàng)建一個 static void _cbSendTaskList(void)函數(shù),使用SEGGER_SYSVIEW_SendTaskInfo發(fā)送所有“任務(wù)”信息。
static void _cbSendTaskList(void) {
for?(int n = 0; n < _NumTasks; n++) {
SEGGER_SYSVIEW_SendTaskInfo(&_aTasks[n]);
}
}
這里的“Tasks”是直接從main調(diào)用的函數(shù),可以使用API描述方法添加嵌套函數(shù)。
6、在main()函數(shù)中調(diào)用SEGGER_SYSVIEW_Conf ();
接下來調(diào)用SEGGER_SYSVIEW_OnTaskCreate()添加“Task”函數(shù),建議為這個任務(wù)創(chuàng)建一個輔助函數(shù),例如在示例項(xiàng)目中的SYSVIEW_AddTask。
void SYSVIEW_AddTask(void* pTask, const char* sName, U32 Prio) {
int n;
SEGGER_SYSVIEW_OnTaskCreate((U32)pTask);
if?(_NumTasks > NUM_TASKS) {
return;
}
n = _NumTasks;
_NumTasks++;
_aTasks[n].TaskID = (U32)pTask;
_aTasks[n].sName ?= sName;
_aTasks[n].Prio ??= Prio;
_aTasks[n].StackBase = 0;
_aTasks[n].StackSize = 0;
}
SYSVIEW_AddTask調(diào)用方式如下:
SYSVIEW_AddTask(_TestFunc0, "TestFunc0", 10);
7、可在main應(yīng)用中初始化系統(tǒng)節(jié)拍時鐘,在節(jié)拍處理程序Systick_Handler開始處調(diào)用SEGGER_SYSVIEW_RecordEnterISR ();結(jié)束時調(diào)用SEGGER_SYSVIEW_RecordExitISR()
void SysTick_Handler(void) {
volatile U32 Cnt;
SEGGER_SYSVIEW_RecordEnterISR();
Cnt++;
SEGGER_SYSVIEW_RecordExitISR();
}
8、在應(yīng)用程序中調(diào)用需記錄的“任務(wù)”函數(shù)。
9、可以在函數(shù)實(shí)現(xiàn)中調(diào)用SEGGER_SYSVIEW_RecordVoid()和SEGGER_SYSVIEW_RecordEndCall()來記錄函數(shù)嵌套。
10、運(yùn)行應(yīng)用程序并啟動SystemView跟蹤。
如果構(gòu)建成功,SystemView記錄應(yīng)該如下圖所示:
審核編輯:黃飛
?
評論