주요 내용으로 건너뛰기

컴파일 및 플래싱

이 섹션에서는 TouchGFX 애플리케이션 코드에서부터 프로그램 실행까지, 특정 설정에 따른 컴파일 및 플래싱 방법을 알아보겠습니다.

TouchGFX 애플리케이션 컴파일

TouchGFX 애플리케이션을 컴파일할 때는 PC 시뮬레이터 컴파일과 타겟 하드웨어 컴파일의 두 가지 옵션이 있습니다.

PC 시뮬레이터 컴파일

PC 시뮬레이터 프로젝트를 컴파일하는 데는 GCC와 Visual Studio의 두 가지 옵션이 있습니다.
두 옵션 모두 TouchGFX Designer에서 생성되기 때문에 언제든지 사용할 수 있습니다.

GCC

Makefile의 위치는 다음과 같습니다. <touchgfx_application_root_folder>/simulator/gcc/Makefile

TouchGFX는 GCC 컴파일러와 GNU Make가 사전 설치된 MinGW 환경을 제공하므로 PC 시뮬레이터 용도로 생성된 Makefile을 쉽게 실행할 수 있습니다.

TouchGFX 환경은 C:/TouchGFX/4.18.0/env/MinGW/msys/1.0/msys.bat에서, 혹은 Windows 시작 메뉴에 추가되는 바로 가기인 "TouchGFX x.y.z 환경"에서 시작할 수 있습니다. 여기서 x, y, z는 버전 번호를 나타냅니다.

TouchGFX 환경을 실행하여 TouchGFX 애플리케이션 루트 폴더로 이동한 후 아래와 같이 간단한 명령을 실행하면 simulator.exe 파일이 생성됩니다.

make -f simulator/gcc/Makefile

그런 다음 TouchGFX 환경에서 다음 명령을 사용하면 시뮬레이터 실행 파일을 실행할 수 있습니다.

./build/bin/simulator.exe

PC 시뮬레이터는 TouchGFX Designer에서도 Run Simulator 명령을 사용해 컴파일하여 실행할 수 있습니다.

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는 GNU Embedded Toolchain for Arm과 GNU Make가 사전 설치된 MinGW 환경을 제공하므로 대상 하드웨어 용도로 포함되는 Makefile을 쉽게 실행할 수 있습니다.

TouchGFX 환경은 C:/TouchGFX/4.18.0/env/MinGW/msys/1.0/msys.bat에서, 혹은 Windows 시작 메뉴에 추가되는 바로 가기인 "TouchGFX x.y.z 환경"에서 시작할 수 있습니다.

TouchGFX 환경을 실행하여 프로젝트 루트 폴더로 이동한 후 아래와 같이 간단한 명령을 실행하면 대상 하드웨어 프로젝트가 컴파일됩니다.

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에서 바로 플래싱할 수 있는 플래시 로더를 제공하지 않습니다.

GCC 및 TouchGFX Designer

TouchGFX Board Setup에서 제공하는 Makefile은<project_root_folder>/gcc/MakeFile에 위치하며, 여기에는 아래와 같이 ST Link Utility 또는 STM32CubeProgrammer(TBS에 따라 다름)를 사용해 STM32 평가 키트를 플래싱하는 플래시 명령이 내장되어 있습니다.

TouchGFX Designer에서 사용하는 것과 동일한 명령을 사용하여 명령줄에서 플래싱을 시작할 수 있습니다.

make -f gcc/Makefile flash

데스크톱 버전 플래시 도구를 사용해 보드를 생성된 .hex 파일로 플래싱하는 방법도 있습니다. .hex 파일은 <project_root_folder>/TouchGFX/build/bin/target.hex에 있습니다.

내부 플래시만 플래싱

많은 개발 보드 및 제품이 두 개의 플래시를 사용합니다. 마이크로컨트롤러의 내부 플래시와 외부 플래시입니다. 일반적으로 내부 플래시는 코드와 소규모 데이터/자주 사용하는 데이터를 포함하며 외부 플래시는 이미지, 비디오, 글꼴과 같은 대규모 데이터 항목을 포함합니다.

내부 플래시에 있는 프로그램에 외부 플래시의 데이터를 가리키는 주소가 포함되어 있는 경우가 많으므로 두 플래시를 동시에 플래싱해야 합니다. 예를 들어 애플리케이션 코드를 약간 수정하는 경우(예: 상자의 색 또는 위치 변경)에는 외부 플래시를 플래싱하지 않고 내부 플래시만 플래싱할 수 있습니다. 이 경우 외부 플래시의 모든 데이터가 수정되지 않으므로 외부 플래시를 다시 플래싱할 필요가 없습니다. 특히 이미지가 많을 때 이러한 방법을 사용하면 플래시 시간을 크게 줄일 수 있습니다.

다만 마지막에 외부 플래시에 작성한 이후로 외부 플래시의 내용이 바뀌지 않았는지 확인해야 합니다. 내용이 바뀌었는데도 다시 플래싱하지 않으면 이상한 동작이 일어나게 됩니다. 이때는 내부 플래시와 외부 플래시를 모두 플래싱하십시오.

make -f gcc/Makefile intflash

내부 플래시의 .hex 파일은 <project_root_folder>/TouchGFX/build/bin/intflash.hex에 있습니다.

링커 스크립트

intflash make target first는 애플리케이션을 컴파일하고 링크합니다. 그런 다음 intflash.hex 파일을 플래싱합니다. 이 파일은 링크 단계 이후에 애플리케이션 elf 파일에서 ExternalFlashSection, TextFlashSectionFontFlashSection 섹션을 제거하여 생성됩니다. 이는 다음 명령을 사용하여 수행됩니다.

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

이 명령의 결과로 내부 플래시에 있는 데이터만 포함하는 hex 파일이 생성됩니다. 이는 링커 스크립트가 외부 플래시에 전술한 세 가지 섹션을 넣을 때만 작동합니다. ouchGFX Board Setup용 gcc 링커 스크립트는 대개 다음과 같습니다.

...  /* 세부 정보 생략 */

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
{
... /* RAM, 플래시 및 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
}

링커 스크립트는 우선 네 가지 메모리 영역을 정의합니다. RAM, FLASH, QUADSPISDRAM입니다. QUADSPI 영역이 외부 플래시입니다. ExtFlashSection, FontFlashSectionTextFlashSections의 3개 섹션은 QUADSPI 영역과 링크되어 있습니다. QUADSPI 영역에는 다른 아무것도 넣지 않습니다. 이것이 모든 것을 포함하는 target.elf 파일에서 이 3개 섹션을 제거하여 내부 플래시용 hex 파일을 생성할 수 있는 이유입니다. 링커 스크립트가 외부 플래시에 다른 데이터도 넣는 경우 내부 플래시 콘텐츠만 남기기 위해 해당 데이터를 삭제해야 합니다.

다른 makefile 또는 컴파일러를 사용하여 대상 elf 파일을 빌드하는 경우 위의 기법을 다시 사용하여 내부 플래시용 hex 파일을 생성하고 TouchGFX Designer 또는 명령줄에서 해당 파일을 플래시할 수 있습니다.

TouchGFX Designer 구성

TouchGFX Board Setup은 TouchGFX Designer에서 Run Target 명령을 통해 프로젝트를 플래싱할 수 있는 구성을 제공합니다. TouchGFX Designer에서 플래싱에 사용되는 이 명령은 TouchGFX Designer의 Config View에 있는 Build Section에서 확인 및 재정의할 수 있습니다.

STM32CubeIDE

TouchGFX Board Setup은 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은 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은 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는 특정 외부 메모리에 필요한 플래시 로딩 메커니즘을 항상 제공하지는 않습니다. 하지만 커스텀 플래시 로더는 생성할 수 있습니다. 자세한 내용은 외부 메모리에 필요한 커스텀 로더 개발 사용자 매뉴얼을 참조하십시오.