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

Compiling-and-Flashing(コンパイルと書き込み)

このセクションでは、TouchGFXアプリケーションから実行プログラムに進む方法、つまり特定のセットアップにおけるコンパイルと書き込みの方法について説明します。

TouchGFXアプリケーションのコンパイル

TouchGFXのアプリケーションをコンパイルする場合には2つのオプションがあります。PCシミュレータ向けのコンパイルとターゲット・ハードウェア向けのコンパイルです。

PCシミュレータ向けのコンパイル

PCシミュレータ向けにプロジェクトをコンパイルする場合、GCCとVisual Studioの2つのオプションがあります。
これらのオプションはどちらもTouchGFX Designerによって生成されるので、常に使用可能です。

GCC

Makefileは、<touchgfx_application_root_folder>/simulator/gcc/Makefileにあります。

TouchGFXにはMinGW環境が含まれており、GCCコンパイラやGNU Makeと共にプリインストールされています。これにより、生成済みのMakefileをPCシミュレータ向けに容易に実行できます。

TouchGFX Environmentは、C:/TouchGFX/4.18.0/env/MinGW/msys/1.0/msys.batから起動するか、Windowsスタート・メニューに追加された"TouchGFX x.y.z Environment"(x、y、zはバージョン番号)というショートカットから起動することができます。

TouchGFX Environmentを起動し、TouchGFX Applicationルート・フォルダに移動した後、次に示す簡単なコマンドを実行してsimulator.exeファイルを生成できます。

make -f simulator/gcc/Makefile

さらに、TouchGFX Environmentから次のコマンドを使用して、このシミュレータ実行可能ファイルを起動できます。

./build/bin/simulator.exe

PCシミュレータは、Run Simulatorコマンドを使用してTouchGFX Designerからコンパイルおよび起動することもできます。

Visual Studio

Visual Studioを使用してPCシミュレータをコンパイルするには、単純に、Visual Studioを使用して<touchgfx_application_root_folder>/simulator/msvs/Application.slnにある生成済みのソリューション・ファイルを開きます。

PCシミュレータをVisual Studioから直接起動して、コードのデバッグが可能です。

Note
GCCまたはVisual Studioによるコンパイルを可能にするには、あらかじめTouchGFX DesignerでGenerateコマンドを実行しておきます。

ターゲット・ハードウェア向けのコンパイル

STM32評価キット向けのプロジェクトのコンパイルは、TouchGFX Board Setupベースのアプリケーションの場合は極めて簡単です。

各々のTouchGFX Board Setupには、GCC、STM32CubeIDE、IAR、Keil向けのプロジェクト・ファイルが含まれています。

  • GCC: <project_root_folder>/gcc/MakeFile
  • STM32CubeIDE: <project_root_folder>/STM32CubeIDE/.cproject
  • IAR: <project_root_folder>/EWARM/Project.eww
  • Keil: <project_root_folder>/MDK-ARM/<STM32_evaluation_kit_name>.uvprojx

アクティブなツール・チェーンは、デフォルトではSTM32CubeMXからSTM32CubeIDEに向けて設定されます。 すべてのプロジェクト・ファイルが、同時に存在するわけではないことに注意してください。 生成されるプロジェクト・ファイルは、STM32CubeMXで選択されるツール・チェーンによって異なります。

TouchGFXにはMinGW環境が含まれており、ArmおよびGNU Make用のGNU Embedded Toolchainがプリインストールされています。これにより、含まれているMakefileをターゲット・ハードウェア向けに容易に実行できます。

TouchGFX Environmentは、C:/TouchGFX/4.18.0/env/MinGW/msys/1.0/msys.batから起動するか、Windowsスタート・メニューに追加された"TouchGFX x.y.z Environment"というショートカットから起動することができます。

TouchGFX Environmentを起動し、プロジェクトのルート・フォルダに移動した後、次に示す簡単なコマンドを実行して、ターゲット・ハードウェア向けにプロジェクトをコンパイルできます。

make -f gcc/Makefile
Note
GCC、STM32CubeIDE、IAR、またはKeilによるコンパイルを可能にするには、あらかじめTouchGFX DesignerでGenerateコマンドを実行しておきます。

STM32評価キットへの書き込み

STM32評価キットへのプロジェクトの書き込みは、事前作成されたTouchGFX Board Setupをベースにしたプロジェクトを使用すると極めて簡単です。

各プロジェクトでは構築時にバイナリが生成され、このバイナリはST Link UtilityまたはSTM32CubeProgrammerのいずれかによって書き込めます。

したがって、書き込みを行うにはこれらのツールをインストールする必要があります。

これらのツールはデフォルトの場所にインストールすることをお勧めします。

  • ST Link Utilityのデフォルトのインストール場所:
    C:/Program Files (x86)/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility
  • STM32CubeProgrammerのデフォルトのインストール場所:
    C:/Program Files/STMicroelectronics/STM32Cube/STM32CubeProgrammer
Note
TouchGFX Board Setupでは、IAR、Keil、STM32CubeIDE、またはその他のIDEから直接書き込むためのFlashローダは提供されません。

GCCとTouchGFX Designer

<project_root_folder>/gcc/MakeFileにあるTouchGFX Board Setupに含まれるMakefileには、次に示すFlashコマンドが組み込まれています。このコマンドは、ST Link UtilityまたはSTM32CubeProgrammer(TBSによって異なる)を使用してSTM32評価キットを書き込みます。

TouchGFX Designerで使用されるのと同じコマンドを使用して、コマンドラインから書き込みを開始できます。

make -f gcc/Makefile flash

デスクトップ・バージョンのFlashツールを使用して、ボードと生成された.hexファイルを書き込むこともできます。 .hexファイルは、<project_root_folder>/TouchGFX/build/bin/target.hexにあります。

内部Flashのみの書き込み

多くの開発ボードと製品では2つのFlashを使用しています。 マイクロコントローラの内部Flashと外部Flashです。 通常、内部Flashにはコードとサイズが小さく、しばしば使用されるデータが含まれていますが、外部Flashには画像、ビデオおよびフォントなどの大きなデータが含まれています。

多くの場合、両方のFlashに同時に書き込む必要があります。というのは、内部Flashのプログラムには、外部Flashのデータを指すアドレスが含まれているからです。 ただし、場合によっては、外部Flashに書き込まずに内部Flashに書き込むことができます。たとえば、アプリケーション・コードに小さな修正を加えた場合などです(ボックスの色や位置の変更など)。 この場合、外部Flashのデータはすべて変更されないため、再度書き込む必要はありません。 大容量の画像セットがある場合、これによって書き込み時間を大幅に短縮できます。

ただし、外部Flashへの前回の書込み以降に、外部Flashのコンテンツが変更されていないことを確認する必要があります。 変更があり、再度書き込みしなかった場合、異常な動作になります。 この場合には、内部Flashと外部Flashの両方を再書き込みします。

make -f gcc/Makefile intflash

内部Flash用の.hexファイルは、<project_root_folder>/TouchGFX/build/bin/intflash.hexにあります。

リンカ・スクリプト

intflashは、まずターゲットをコンパイルして、アプリケーションをリンクします。 次に intflash.hexファイルを書き込みます。 このファイルは、ExternalFlashSectionTextFlashSection、およびFontFlashSectionセクションをアプリケーションelfファイルから削除することにより、リンク・ステップ後に生成されます。 これは次のコマンドを使用して行います。

arm-none-eabi-objcopy -O ihex --remove-section=ExtFlashSection --remove-section=FontFlashSection --remove-section=TextFlashSection target.elf intflash.hex

このコマンドを実行した結果、内部Flashにあるデータのみを含むhexファイルが生成されます。 これは、リンカ・スクリプトが前述の3つのセクションを外部Flashに配置する場合にのみ機能します。 TouchGFX Board Setupのgccリンカ・スクリプトは、通常、次のようになります。

...  /* Details skipped */

MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
QUADSPI (r) : ORIGIN = 0x90000000, LENGTH = 16M
SDRAM (xrw) : ORIGIN = 0xC0000000, LENGTH = 8M
}

SECTIONS
{
... /* Sections for RAM, Flash, SDRAM */

ExtFlashSection :
{
*(ExtFlashSection ExtFlashSection.*)
*(.gnu.linkonce.r.*)
. = ALIGN(0x4);
} >QUADSPI

FontFlashSection :
{
*(FontFlashSection FontFlashSection.*)
*(.gnu.linkonce.r.*)
. = ALIGN(0x4);
} >QUADSPI

TextFlashSection :
{
*(TextFlashSection TextFlashSection.*)
*(.gnu.linkonce.r.*)
. = ALIGN(0x4);
} >QUADSPI
}

リンカ・スクリプトでは、まず次の4つのメモリ領域RAMFLASHQUADSPI、およびSDRAMを定義します。 QUADSPI領域は外部Flashです。 3つのセクションExtFlashSectionFontFlashSection、およびTextFlashSectionsは、QUADSPI領域にリンクされます。 QUADSPI領域には、これ以外は何も含まれません。 このため、すべてを含むtarget.elfファイルからこれら3つのセクションを削除することにより、内部Flashに格納するhexファイルを生成できます。 もし、リンカ・スクリプトによってその他のデータも外部Flashに配置した場合、そのデータを削除して、内部Flashコンテンツのみになるようにする必要があります。

他のmakefilesやコンパイラを使用してターゲットのelfファイルを構築する場合、上記のテクニックを再度使用して、内部Flash用のhexファイルを作成し、それをTouchGFX Designerやコマンドラインから書き込めます。

TouchGFX Designerの設定

TouchGFX Board Setupでは、TouchGFX DesignerがRun Targetコマンドによって、プロジェクトを書き込めるように設定できます。 TouchGFX Designerが書き込みのために使用するコマンドは、TouchGFX DesignerのConfig ViewBuildセクションに表示され、オーバーライドできます。

STM32CubeIDE

TouchGFX Board Setupでは、STM32CubeIDEによってコンパイルされたプロジェクトを書き込むことができます。このためには、STM32CubeProgrammerで、STM32CubeIDEから出力された.elfファイルを使用します。

.elfファイルは、<project_root_folder>/STM32CubeIDE/Debug/<STM32_evaluation_kit_name>.elfにあります。

例: C:/TouchGFXProjects/MyApplication/STM32CubeIDE/Debug/STM32F746G_DISCO.elf

IAR

TouchGFX Board Setupでは、IARによってコンパイルされたプロジェクトを書き込むことができます。このためには、STM32CubeProgrammerで、IARから出力された.hexファイルを使用します。

.hexファイルは、<project_root_folder>/EWARM/<STM32_evaluation_kit_name>/Exe/<STM32_evaluation_kit_name>.hexにあります。

例: C:/TouchGFXProjects/MyApplication/EWARM/STM32F469I-DISCO/STM32F469I-DISCO.hex

Keil

TouchGFX Board Setupでは、Keilによってコンパイルされたプロジェクトを書き込むことができます。このためには、STM32CubeProgrammerで、Keilから出力された.hexファイルを使用します。

.hexファイルは、<project_root_folder>/MDK-ARM/<STM32_evaluation_kit_name>/<STM32_evaluation_kit_name>.hexにあります。

例: C:/TouchGFXProjects/MyApplication/MDK-ARM/STM32F469I-DISCO/STM32F469I-DISCO.hex

カスタム・ハードウェアの書き込み

STM32評価キットなどの事前定義されたハードウェア・セットアップではなく、カスタム・ハードウェアを書き込む必要がある場合でも、STM32CubeProgrammerを使用できます。 STM32CubeProgrammerは、ユーザ固有の外部メモリのFlashロード・メカニズムが必ずしも付属しているわけではありません。 しかし、カスタムFlashローダを作成することができます。 詳細については、ユーザマニュアルの外部メモリ向けにカスタマイズされたローダの開発に関する記述を参照してください。