效能測量
TouchGFX Core會暴露許多訊號,可用於測量效能。 使用者可檢測應用程式,以便在內部觸發前述訊號時觸發個別GPIO,透過視覺化方式呈現「渲染時間」及其他實用訊號。 本文說明如何在CubeMX設定GPIO,以及各項暴露訊號的功能。
Further reading
由TouchGFX Core暴露的訊號
以下訊號是在TouchGFX Core標頭檔GPIO.hpp
之中定義:
訊號 | 說明 |
---|---|
VSYNC_FREQ | TouchGFX應用程式是由內部或外部事件所驅動,例如LTDC、外部周邊設備或硬體計時器造成的中斷事件。 TouchGFX引擎完成渲染時,會等待VSYNC 訊號。 其中會指出顯示器何時完成更新,讓TouchGFX能夠開始渲染下個畫面。 |
RENDER_TIME | 這是指從畫面傳輸至TouchGFX一直到渲染階段結束時的時間。 |
FRAME_RATE | 這是使用者應用程式的畫面播放速率。 訊號會在畫面更新時切換。 如果渲染時間超過顯示器定義的最大渲染時間,畫面播放速率就會下降。 |
MCU_ACTIVE | 只要TouchGFX使用MCU,此訊號就會為High。 如果傳輸了影像緩衝區且TouchGFX正在運作,也就是不在閒置狀態時,MCU就處於使用中狀態。 |
STM32CubeMX GPIO設定
STM32CubeMX可用於簡單設定GPIO輸出腳位。 向每個腳位提供User Label (使用者標籤),則TouchGFX Generator在TouchGFXGPIO.cpp
之中產生的程式碼,就可瞭解由TouchGFX Core在內部接收訊號時要切換的腳位。
在Pinout (腳位輸出)視窗中設定四個未使用的GPIO作為輸出。 在STM32CubeMX GPIO IP之中向每個腳位提供User Label
(使用者標籤);前述使用者標籤與TouchGFX Core定義的特定名稱相符,應透過GPIO觸發(例如VSYNC_FREQ
、RENDER_TIME
、FRAME_RATE
或MCU_ACTIVE
。 ).
TouchGFXGPIO類別
TouchGFX Generator會在檔案TouchGFXGPIO.cpp
之中為GPIO類別產生函數。 TouchGFX Core會在TouchGFXGPIO
類別呼叫函數,然後依據STM32CubeMX之中的使用者設定切換腳位。 GPIO::set
會顯示在以下程式碼片段中:
TouchGFXGPIO.cpp
void GPIO::set(GPIO_ID id)
{
switch (id)
{
case GPIO::VSYNC_FREQ:
#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin)
HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::RENDER_TIME:
#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin)
HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::FRAME_RATE:
#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin)
HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::MCU_ACTIVE:
#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin)
HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, GPIO_PIN_SET);
#endif
break;
}
}
如果腳位的使用者標籤為VSYNC_FREQ
,CubeMX將會自動為連接埠及腳位產生相符的符號,例如VSYNC_FREQ_GPIO_Port
、VSYNC_FREQ_Pin
。 若要測量所設定的訊號,請使用示波器或邏輯分析儀。 下圖為邏輯分析儀顯示四種訊號的每一種訊號。 應用程式於STM32F746G-DISCO執行,使用動畫圖像UI範例。 用於此應用程式的VSYNC
訊號是由LTDC每16ms產生一次。