デバッグ
TouchGFXアプリケーションは、TouchGFX DesignerやTouchGFX Generatorによって生成され、開発者によって記述されるC++ファイルのセットなので、他のC++アプリケーションと同じようにデバッグすることができます。
ターゲットのデバッグ
IAR Workbench、Keil uVision、またはSTM32CubeIDEなどのIDEを使用している場合、ターゲット上でのデバッグは、そのIDEの使用可能なメカニズムを使用して簡単に実行できます。 TouchGFX Generatorによって生成された、あるいはTouchGFX Board Setupから直接生成されたTouchGFXプロジェクトは、選択したツール・チェーンを使用してすぐにデバッグを実行できます。
評価ボードの立ち上げコードとTouchGFX ALは、ターゲット・ボード上でのみ実行されるので、そこでデバッグする必要があります。 アプリケーションのUI部分は、ターゲット上で、またはシミュレータを使用してデバッグできます。 ターゲット上では、通常はアニメーション速度、更新頻度、応答性などのパフォーマンス問題のような内容をデバッグします。 他のUI固有の問題もターゲット上でデバッグできますが、多くの場合、シミュレータを使用したデバッグの方が高速です。
シミュレータのデバッグ
アニメーションの動き、遷移、要素の更新、プログラム・ロジックといったUI関連の問題のデバッグは、ほとんどの場合、毎回ボードをフラッシュするのではなく、シミュレータを使用してテストおよびデバッグした方が効率的です。
TouchGFXアプリケーションはVisual Studioをサポートしており、このためのプロジェクト・ファイルを維持しています。 Visual Studioを使用して、シミュレータをデバッグ・モードで実行し、IDEのすべてのデバッグ機能を利用することができます。
シミュレータを使用してデバッグする場合、Visual Studioに制限されるわけではありません。 アプリケーションはGCCでコンパイルできるので、別のIDEを使用しているのなら、そのIDEを、GCCでコンパイルされたプロジェクトをデバッグするために設定する可能性が最も高いでしょう。 ただしこのためには、ユーザ自身でIDEを設定する必要があります。
DebugPrinterの使用
DebugPrinterクラスは画面上にデバッグ・メッセージを簡単に出力する方法で、TextAreaやその他のウィジェットをスクリーンに追加する必要がありません。 たとえば、バックエンドからのイベント、あるいはFPSやレンダリング時間などの測定値を表示するために使用できます。
DebugPrinterを使用するには、インスタンスを割当てて、Applicationクラスに渡す必要があります。 これは、FrontendApplicationのコンストラクタなどで実行できます。
デバッグ・プリンタはフレームバッファのフォーマットと互換性を持つ必要があります。 次の例では、gui/src/common/FrontendApplication.cpp
に16 bppのデバッグ・プリンタを追加しています。
#include <gui/common/FrontendApplication.hpp>
#include <platform/driver/lcd/LCD16bpp.hpp>
LCD16DebugPrinter lcd16bppDebugPrinter;
FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
: FrontendApplicationBase(m, heap)
{
lcd16bppDebugPrinter.setPosition(0, 0, 240, 40);
lcd16bppDebugPrinter.setScale(2);
lcd16bppDebugPrinter.setColor(0x00); //black
Application::setDebugPrinter(&lcd16bppDebugPrinter);
}
ここでは、上側の240 x 40ピクセルにDebugPrinterを書き込むように設定しました。
アプリケーションで、以下を使用して文字列を出力できるようになりました。
char debugStringBuffer[30];
void updateDebugString()
{
static int count = 0;
count++;
snprintf(debugStringBuffer, sizeof(debugStringBuffer), "tick: %d", count);
Application::getDebugPrinter()->setString(debugStringBuffer);
Application::invalidateDebugRegion();
}
Note
DebugPrinterクラス
DebugPrinterインスタンスは、使用するLCDクラスと互換性を持つ必要があります。 次のテーブルには、DebugPrinterクラス名がリストされています。
LCDクラス | DebugPrinterクラス |
---|---|
LCD1bpp | LCD1DebugPrinter |
LCD2bpp | LCD2DebugPrinter |
LCD4bpp | LCD4DebugPrinter |
LCD8bpp_ARGB2222 | LCD8ARGB2222DebugPrinter |
LCD8bpp_ABGR2222 | LCD8ABGR2222DebugPrinter |
LCD8bpp_RGBA2222 | LCD8RGBA2222DebugPrinter |
LCD8bpp_BGRA2222 | LCD8BGRA2222DebugPrinter |
LCD16bpp | LCD16DebugPrinter |
LCD16bppSerialFlash | LCD16DebugPrinter |
LCD24bpp | LCD24DebugPrinter |
LCD32bpp | LCD32DebugPrinter |
使用するLCDクラスと一致するDebugPrinterクラスを使用してください。