生成された動作の変更
生成されたコードの構造と、開発者がそれを使用して設定や動作をカスタマイズする方法を理解することは重要です。
STM32CubeMXで生成するファイル内のユーザ記述のコードは、STM32CubeMXで生成されるコード(Cコード)全体に明示的に配置されたUser Codeセクションを使用することで保護されます。 「ALアーキテクチャ」で説明するように、TouchGFX Generatorで生成されるコード(C++コード)ではこの柔軟性が保持されています。
TouchGFX Generatorは、TouchGFX/targetフォルダ内に変更可能なユーザ・クラスを生成するので、開発者はこれを使用してHALの動作を拡張し、HALで設定された機能をオーバーライドすることができます。 これらのファイルのコンテンツは、STM32CubeMXを使用して初回のコード生成を行うときのみ一度だけ生成されます。 変更可能なクラスに追加されたユーザ・コンテンツは、コードを再生成するときにSTM32CubeMXによって上書きされないように保護されます。
HALの動作の拡張
一部のドライバは、ハードウェア固有であるため、TouchGFX Generatorが完全に動作するHALを生成できません。 TouchGFX Generatorは変更可能なユーザ・クラスを生成します。これはTouchGFXフレームワークから継承するもので、開発者は特定の機能を持たせるために実装する必要がある空のメソッドがあります。 これらのクラスには次のものが含まれます。
STM32TouchController.cpp
- タッチ・コントローラの動作を定義します。TouchGFXGPIO.cpp
- パフォーマンス測定のために信号をGPIOに公開します。OSWrappers.cpp
- OSALを定義します(TouchGFX GeneratorでカスタムRTOSが選択された場合のみ、TouchGFX/tagret内に生成されます)。TouchGFXDMA.cpp
- カスタムDMA2Dの動作を定義します(TouchGFX Generatorでカスタムのハードウェア・アクセラレーションが選択された場合のみ生成されます)。TouchGFXDataReader.cpp
- データ・リーダ・インタフェースの動作を定義します(TouchGFX Generatorで外部データ・リーダが有効になっている場合のみ生成されます)。
たとえば、STM32TouchController.cpp
には、開発者の実装用に、次のようなsampleTouch()
の空の定義が見つかります。
STM32TouchController.cpp
bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y)
{
/**
* By default sampleTouch returns false,
* return true if a touch has been detected, otherwise false.
*
* 座標は、xとyを参照することで呼び出し元に渡されます。
*
* この関数はTouchGFX frameworkによりコールされます。
* デフォルトでは、sampleTouchはティックごとにコールされ、これは HAL::setTouchSampleRate(int8_t)で調整できます。;
*
*/
falseを返します。;
}
HALの設定のオーバーライド
HALはクラス階層を持つので、TouchGFXHAL.cpp
内では、STM32CubeMXによって生成されたHALの設定や動作をユーザがオーバーライドできます。
以下の例では、開発者がinitialize()
メソッドを変更することで、TouchGFXの追加設定や、TouchGFXGeneratedHAL
の既存の設定の変更が可能です。
TouchGFXHAL.cpp
void TouchGFXHAL::initialize()
{
// Calling parent implementation of initialize().
//
// 生成された実装を上書きするには、親関数へのコールを省略し、
// ここで必要な機能を実装します。
// フレームワークを初期化するため、HAL::initialize()をコールすることに注意してください。
TouchGFXGeneratedHAL::initialize();
//設定を上書き
hal.lockDMAToFrontPorch(true);
hal.setFingerSize(4);
hal...
}