パフォーマンスの測定
TouchGFXコアは、パフォーマンスの測定に使用できるいくつかの信号を公開しています。 ユーザは、これらの信号が内部でトリガされると、アプリケーションを使用して個々のGPIOをトリガし、「描画時間」とその他の有用な信号を視覚化できます。 この記事では、CubeMXでGPIOを設定する方法と公開された各信号の機能について説明します。
Further reading
TouchGFXコアで公開されている信号
次の信号は、TouchGFXコアのヘッダファイルGPIO.hpp
に定義されています。
信号 | 説明 |
---|---|
VSYNC_FREQ | TouchGFXアプリケーションは、LTDC、外部ペリフェラル、またはハードウェア・タイマからの割込みなどの内部または外部のイベントによって駆動されます。 TouchGFXエンジンは描画を終了したときに、VSYNC 信号を待ちます。 この信号は、ディスプレイが更新を終了したことを示し、TouchGFXは次のフレームの描画を開始できます。 |
RENDER_TIME | これは、フレームがTouchGFXに転送開始されてから、描画フェーズ終了までの時間です。 |
FRAME_RATE | ユーザ・アプリケーションのフレームレートです。 フレームが更新されると、信号がトグルします。 描画時間がディスプレイで定義されている最大描画時間を超えると、フレームレートが低下します。 |
MCU_ACTIVE | この信号は、TouchGFXがマイクロコントローラを使用している時には、常にハイレベルになっています。 マイクロコントローラは、フレームバッファが転送されたり、TouchGFXが動作している(アイドルタスクにない)場合には、アクティブです。 |
STM32CubeMX GPIOの設定
STM32CubeMXを使用して、GPIO出力ピンの設定を簡単にできます。 各ピンにユーザラベルを付けることにより、TouchGFXGPIO.cpp
のTouchGFX Generatorで生成されるコードは、TouchGFXコアからの信号が内部で受信された時にどのピンをトグルするのか認識します。
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_Port
、VSYNC_FREQ_Pin
など、ポート、ピンに一致するシンボルを自動的に生成します。 設定済みの信号を測定するには、オシロスコープやロジック・アナライザを使用します。 以下の画像は、ロジック・アナライザが表示する4つの各信号を示しています。 アプリケーションは、Animated Image UI Exampleを使用して、STM32F746G-DISCO上で実行されています。 このアプリケーションのVSYNC
信号は、16msごとにLTDCによって生成されます。