STM32 の TouchGFX アプリケーションを作っていて、よく発生するのは
あるプロジェクトをもって別のプロジェクトに流用したとき、ビルドが通らなくなることです。
TouchGFX アプリケーションのファイルの依存性は
[TouchGFX Generator] --(Generate)--> [STM32CubeIDE プロジェクト], [STM32CubeMX ファイル], [ソースコード] [STM32CubeMX] --(Generate)--> [STM32CubeIDE プロジェクト], [ソースコード]
となっています。
既存プロジェクトから TouchGFX Generator および STM32CubeMX で再度 Generate する際、
プロジェクト中のファイルを読み込んで使用します。
プロジェクト中のファイルが期待通りでないと、Generate が正しく完了しないが
エラーは表示されないことがあります。
そういった場合、Build Error ではじめてエラーになるので、ユーザはどこが問題なのか
デバッグに時間がとられます。
たとえば、マイコンによっては
IDE のプロジェクト名を変えると、それ以降の STM32CubeMX の Generate が
成功しなくなります。これは Generate でエラーが出ないので、必要なファイルが生成されず
ビルドが通らなくなります。この場合 IDE プロジェクトファイル自体が壊れてしまうので
バックアップを取っていない場合、復旧は面倒です。
そして、TouchGFX Generator が生成する IDE プロジェクト名は固定なので
結果として運用上「プロジェクト名は変えられない」という結論になります。これは困ります。
今日は以前のプロジェクトを編集していたところ、下記のエラーが出ました。
flushLine 関数の実体がないというエラーですが、原因は TouchGFX のバージョンが
上がったことによります。ライブラリのバージョンが上がり(4.23 -> 4.24)、必要な関数が増えたにもかかわらず、TouchGFX Generator の Generate Code だけでは .cpp ファイルが更新されていませんでした。
STM32CubeMX のほうでも .ioc ファイルを開き、Generate Code することでビルドが通るようになりました。