デバッグ
TouchGFXアプリケーションは、TouchGFX DesignerやTouchGFX Generatorによって生成され、開発者によって記述されるC++ファイルのセットなので、他のC++アプリケーションと同じようにデバッグすることができます。
ターゲットのデバッグ
IAR Workbench、Keil μVision、または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
に(LCD16bppと互換性がある)16 bppのデバッグ・プリンタを追加しています。
#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);
}
ここでは、左上の240 x 40ピクセルにDebugPrinterを書き込むように設定しました。 このアプリケーションでは、以下を使用して文字列を出力できるようになりました。
#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
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クラスを使用してください。
シミュレータ・プロジェクトでは、generated/simulator/src/mainBase.cpp内にLCDインスタンスが作成されます。 ターゲット・プロジェクトでは、このインスタンスはTouchGFX/target/generated/TouchGFXConfiguration.cpp内に作成されます。
TouchGFX/target/generated/TouchGFXConfiguration.cpp
...
static LCD16bpp display;
...
これらのファイルをチェックすることで、LCDクラス名を確認できます。