跳轉到主要內容

除錯

由於TouchGFX應用程式是一組由TouchGFX Designer、TouchGFX Generator生成並由開發人員編寫的C++檔,因此可以像任何其他C++應用程式一樣除錯。

目標除錯

如果您正在使用像IAR Workbench、Keil μVision或STM32CubeIDE這類IDE,則可以直接使用IDE的可用機制進行目標除錯。 由TouchGFX Generator或直接從TouchGFX開發板設置生成的TouchGFX專案可以使用選定的工具鏈進行除錯。

Board bring up程式碼和TouchGFX AL只在目標開發板上執行,因此需要在那裡進行除錯。 應用程式的UI部分可以在目標上除錯或使用模擬器進行除錯。 在目標上,您通常會除錯性能問題等,如動畫速度、更新頻率和回應能力。 其他特定於UI的問題可以在目標上除錯,但使用模擬器除錯通常會更快。

模擬器除錯

除錯與UI相關的問題,如動畫動作、轉換、元素更新、程式邏輯等等;在大多數情況下,使用模擬器進行測試和除錯比每次燒錄開發板要高效得多。

TouchGFX應用程式還支援Visual Studio,並為其提供和維護一個專案檔案。 使用Visual Studio時,可以在除錯模式下運行模擬器,利用IDE的所有除錯功能。

如果想要使用模擬器進行除錯,您可以不局限於Visual Studio。 應用程式可以通過GCC進行編譯,如果使用不同的IDE,則很可能將其設置為除錯GCC編譯過的專案。 但是,您需要配置您的IDE,以便自己完成。

在Visual Studio中除錯

使用DebugPrinter

DebugPrinter類是一種在顯示器上列印除錯訊息的簡單方法,無需向螢幕添加TextArea或其他小部件。 例如,這種方法可用於顯示來自後端的事件、或FPS或渲染時間等。

在使用DebugPrinter之前,需要分配一個實例並將其傳遞給Application類。 例如,這可以在FrontendApplication的構造函數中實現。

除錯顯示器與影像緩衝區格式相容。 下表顯示了可用的類名。 這裡我們在gui/src/common/FrontendApplication.cpp中添加了一個16bpp除錯介面(與LCD16bpp相容):

#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/lcd/LCD16DebugPrinter.hpp>

LCD16DebugPrinter lcd16DebugPrinter; // Global object

FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
: FrontendApplicationBase(m, heap)
{
lcd16DebugPrinter.setPosition(0, 0, 240, 40);
lcd16DebugPrinter.setScale(2);
lcd16DebugPrinter.setColor(0x00); //black
Application::setDebugPrinter(&lcd16DebugPrinter);
}

此時,我們已經將DebugPrinter配置為左上角240 x 40像素寫入。 在您的應用程式中,現在可以使用以下指令列印字串:

#include <stdio.h>

char debugStringBuffer[30];
void updateDebugString()
{
static int count = 0;
count++;
snprintf(debugStringBuffer, sizeof(debugStringBuffer), "tick: %d", count);
Application::getDebugPrinter()->setString(debugStringBuffer);
Application::invalidateDebugRegion();
}

您不必在應用程式中多次呼叫DebugPrinter::setString法。 但是,當您更改了緩存區的內容時,請呼叫invalidateDebugRegion。 這將使DebugPrinter繪製新內容。 如果DebugPrinter覆蓋區域中的普通小工具被重繪,DebugPrinter也會重繪。

Note
從ASCII 32(空格)到 ASCII 126(’~’)的字元均可用。

使用DebugPrinter

DebugPrinter類

DebugPrinter實例必須相容所使用的LCD類。 該表列出了DebugPrinter類名稱:

LCD 類DebugPrinter類
LCD1bppLCD1DebugPrinter
LCD2bppLCD2DebugPrinter
LCD4bppLCD4DebugPrinter
LCD8bpp_ARGB2222LCD8ARGB2222DebugPrinter
LCD8bpp_ABGR2222LCD8ABGR2222DebugPrinter
LCD8bpp_RGBA2222LCD8RGBA2222DebugPrinter
LCD8bpp_BGRA2222LCD8BGRA2222DebugPrinter
LCD16bppLCD16DebugPrinter
LCD16bppSerialFlashLCD16DebugPrinter
LCD24bppLCD24DebugPrinter
LCD32bppLCD32DebugPrinter

使用與正在使用的LCD類匹配的DebugPrinter類。

對於模擬器專案,LCD實例在generated/Simulator/src/main base.cpp中創建。 對於目標專案,實例在Touch gfx/target/generated/touchgfxconfiguration.cpp中創建:

TouchGFX/target/generated/TouchGFXConfiguration.cpp
...
靜態LCD16bpp顯示;
...

您可以檢查這些檔來驗證您的LCD類名。