メイン・コンテンツまでスキップ

パフォーマンスの測定

TouchGFXコアは、パフォーマンスの測定に使用できるいくつかの信号を公開しています。 ユーザは、これらの信号が内部でトリガされると、アプリケーションを使用して個々のGPIOをトリガし、「描画時間」とその他の有用な信号を視覚化できます。 この記事では、CubeMXでGPIOを設定する方法と公開された各信号の機能について説明します。

TouchGFXコアで公開されている信号

次の信号は、TouchGFXコアのヘッダファイルGPIO.hppに定義されています。

信号説明
VSYNC_FREQTouchGFXアプリケーションは、LTDC、外部ペリフェラル、またはハードウェア・タイマからの割込みなどの内部または外部のイベントによって駆動されます。 TouchGFXエンジンは描画を終了したときに、VSYNC信号を待ちます。 この信号は、ディスプレイが更新を終了したことを示し、TouchGFXは次のフレームの描画を開始できます。
RENDER_TIMEこれは、フレームがTouchGFXに転送開始されてから、描画フェーズ終了までの時間です。
FRAME_RATEユーザ・アプリケーションのフレームレートです。 フレームが更新されると、信号がトグルします。 描画時間がディスプレイで定義されている最大描画時間を超えると、フレームレートが低下します。
MCU_ACTIVEこの信号は、TouchGFXがマイクロコントローラを使用している時には、常にハイレベルになっています。 マイクロコントローラは、フレームバッファが転送されたり、TouchGFXが動作している(アイドルタスクにない)場合には、アクティブです。

STM32CubeMX GPIOの設定

STM32CubeMXを使用して、GPIO出力ピンの設定を簡単にできます。 各ピンにユーザラベルを付けることにより、TouchGFXGPIO.cppのTouchGFX Generatorで生成されるコードは、TouchGFXコアからの信号が内部で受信された時にどのピンをトグルするのか認識します。

[Pinout]ビューで、4本の未使用のGPIOピンを出力として設定します。 [STM32CubeMX GPIO IP]で、GPIOを通じてトリガされる各ピンに`User Label`を付けます。このラベルはTouchGFXコアによって定義された特定の名前と一致させます(`VSYNC_FREQ`、`RENDER_TIME`、`FRAME_RATE`または`MCU_ACTIVE`)。 ).

TouchGFXGPIOクラス

TouchGFX Generatorは、TouchGFXGPIO.cppファイルでGPIOクラスの関数を生成します。 TouchGFXコアは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_PortVSYNC_FREQ_Pinなど、ポート、ピンに一致するシンボルを自動的に生成します。 設定済みの信号を測定するには、オシロスコープやロジック・アナライザを使用します。 以下の画像は、ロジック・アナライザが表示する4つの各信号を示しています。 アプリケーションは、Animated Image UI Exampleを使用して、STM32F746G-DISCO上で実行されています。 このアプリケーションのVSYNC信号は、16msごとにLTDCによって生成されます。