주요 내용으로 건너뛰기

TouchGFX에서 IDE 사용하기

TouchGFX Designer 또는 STM32CubeMX를 통해 TouchGFX 프로젝트를 새로 생성할 때는 다음과 같이 전용 IDE를 사용할 수 있는 프로젝트 파일과 라이브러리가 제공됩니다.

  • Keil uVision (타겟 전용)
  • IAR Embedded Workbench (타겟 전용)
  • STM32CubeIDE (타겟 전용)
  • Microsoft Visual Studio (시뮬레이터 전용)

단, 일부 프로젝트 파일은 프로젝트에 한 번에 표시되지 않습니다. STM32CubeMX에서 선택된 도구 체인이 생성되며, 기본적으로 STM32CubeIDE가 선택됩니다.

Further reading
도구 체인 변경 방법은 여기에서 확인할 수 있습니다.

또한 ARM 타겟용 GCC 크로스 컴파일러를 통한 쉘 기반 컴파일에 사용할 수 있는 makefile과 라이브러리도 제공됩니다. 이 섹션은 TouchGFX 애플리케이션 개발에 있어 타사 GCC 기반 IDE를 구성하는 데 도움이 될 것입니다. 기본적으로 GCC 크로스 컴파일러를 호출할 수 있는 IDE라면 무엇이든 사용 가능합니다.

Note
이 섹션에서는 일반 용어를 사용해 설정 절차를 설명합니다. 모든 IDE를 지원하지는 않지만 여기서 제공하는 정보가 즐겨 사용하는 IDE와 함께 TouchGFX를 사용하는 데 도움이 될 수 있기를 바랍니다.

이 섹션에서는 TouchGFX에서 다른 IDE를 사용할 수 있는 두 가지 접근 방식을 설명합니다. 한 가지는 IDE에서 TouchGFX Makefile을 호출하는 방식입니다. 어쩌면 가장 쉬운 방식일 수 있지만, 컴파일 프로세스와 파일 위치를 좀 더 확실하게 제어하고자 할 경우에는 바람직한 방법이 아닙니다. 아니면 필요한 TouchGFX 파일과 구성 옵션을 기존 프로젝트에 직접 추가하는 방법도 있습니다.

전제 조건: GCC 버전

이 섹션은 TouchGFX 환경 쉘에서 배포되는 GCC 크로스 컴파일러 도구 체인을 사용하거나, 혹은 환경 쉘 도구 체인을 사용해 컴파일된 TouchGFX 코어 라이브러리와 연결되는 GCC 도구 체인을 선택하여 사용하는 것으로 가정합니다.

사용되는 GCC 컴파일러:

$ arm-none-eabi-gcc.exe -v
Target: arm-none-eabi
Thread model: single
gcc version 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] (GNU Tools for Arm Embedded Processors 7-2018-q2-update)

위의 컴파일러는 https://launchpad.net/gcc-arm-embedded에서 다운로드할 수 있습니다.

IDE에서 TouchGFX Makefile 호출하기

TouchGFX Designer에서 생성한 프로젝트에 포함된 Makefile을 호출하기만 하면 IDE에서 TouchGFX 애플리케이션을 빠르고 간편하게 컴파일할 수 있습니다. TouchGFX 환경 쉘을 사용해 타겟용 애플리케이션을 컴파일하려면 TouchGFX 애플리케이션 루트 디렉터리로 이동하여 다음 명령을 실행해야 합니다.

$ make -f gcc/Makefile

또한 이제는 TouchGFX 환경 쉘에서 make 명령을 호출하지 않고 IDE에서 호출할 수 있습니다. 쉘(make, arm-none-eabi-gcc, ..)에서 사용하는 실행 파일은 일반적인 Windows x86 실행 파일입니다. 따라서 일반적인 명령 프롬프트로도 make 애플리케이션을 실행할 수 있습니다. 단, 아래와 같이 환경 변수가 구성되어 있어야 합니다.

C:\TouchGFX\4.18.0\env\MinGW\bin
C:\TouchGFX\4.18.0\env\MinGW\msys\1.0\Ruby30-x64\bin
C:\TouchGFX\4.18.0\env\MinGW\msys\1.0\bin
C:\TouchGFX\4.18.0\env\MinGW\msys\1.0\gnu-arm-gcc\bin

필요한 Windows 환경 변수를 설정했다면 이제 IDE에서 해당하는 TouchGFX Makefile의 make 명령을 바로 호출할 수 있습니다. 실행해야 할 정확한 명령은 쉘에서 컴파일할 때와 동일하며, 다음과 같습니다.

$ make -f gcc/Makefile
Note
이때 현재 디렉터리가 컴파일할 애플리케이션의 루트 디렉터리이어야 합니다.

TouchGFX 코드 파일을 자체 프로젝트에 추가하기

그렇지 않고 빌드 프로세스와 파일 위치에 대한 제어를 강화하고 싶다면 관련 TouchGFX 코드 파일을 기존 프로젝트에 통합한 후 컴파일에 필요한 include 경로와 컴파일러 스위치를 추가할 수 있습니다.

필요한 파일

기본적으로 IDE 프로젝트에 추가하는 TouchGFX 파일은 TouchGFX 환경 쉘에서 make를 사용해 빌드할 때 컴파일하는 파일과 동일해야 합니다. 추가되는 파일은 대상 보드에 따라 다른데, 이는 각 보드마다 하위 레벨(low-level) 드라이버가 다르기 때문입니다. 필요한 파일을 알고 싶다면 해당하는 보드에 TouchGFX 환경 쉘을 사용해 애플리케이션을 컴파일해보는 것이 좋습니다. 컴파일 프로세스에서 컴파일되는 파일을 모두 알려주기 때문에 추가해야 할 파일 목록을 정확히 알 수 있습니다.

Include 경로

다음 include 경로를 컴파일에 추가해야 합니다.

.../TouchGFX/gui/include
.../TouchGFX/generated/gui_generated/include
.../TouchGFX/platform/os
.../TouchGFX/generated/fonts/include
.../TouchGFX/generated/images/include
.../TouchGFX/generated/texts/include
.../TouchGFX/generated/videos/include
.../Middlewares/ST/touchgfx/framework/include
Tip
위의 include 경로 외에 보드 전용 코드에도 include 경로를 추가해야 합니다. 관련 정보는 gcc/Makefile 파일에서 확인할 수 있습니다.

컴파일러 스위치

include 경로와 마찬가지로 활성화해야 하는 일반 컴파일러 스위치가 있습니다. 또한 프로세서 코어 및 실제 보드 전용 컴파일러 스위치도 있습니다. TouchGFX 코어 라이브러리를 컴파일하는 데 사용되는 컴파일러 스위치는 각 코어별로 아래와 같습니다. 이들 옵션 중에는 코드를 컴파일할 때 링커가 정상적으로 실행되게 하는 필수 옵션과 선택 사항인 옵션이 있습니다. 반드시 필요한 것으로 알려진 옵션은 굵게 표시되어 있습니다.

Cortex-M0 cores

-fno-rtti -fno-exceptions -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m0plus -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M0PLUS

Cortex-M4f cores

-fno-rtti -fno-exceptions -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m4 -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M4 -march=armv7e-m

Cortex-M7 cores

-fno-rtti -fno-exceptions -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m7 -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M7

Cortex-M33 cores

-fno-rtti -fno-exceptions -mfpu=fpv5-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m33 -D__irq="" -mthumb -mno-thumb-interwork -std=c99 -Os -fno-strict-aliasing -fdata-sections -ffunction-sections -Wno-psabi -DCORE_M33

링커

코어 라이브러리

TouchGFX 코어 라이브러리와 연결해야 합니다. MCU에 따라 다르지만 다음 중 하나를 연결합니다.

.../Middlewares/ST/touchgfx/lib/core/cortex-m0/gcc/libtouchgfx.a
.../Middlewares/ST/touchgfx/lib/core/cortex-m4f/gcc/libtouchgfx.a
.../Middlewares/ST/touchgfx/lib/core/cortex-m7/gcc/libtouchgfx.a
.../Middlewares/ST/touchgfx/lib/core/cortex-m33/gcc/libtouchgfx.a

링커 옵션

또한 일부 링커 옵션도 필요합니다. TouchGFX에서 사용되는 옵션은 다음과 같습니다.

Cortex-M0: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m0plus -Wno-psabi -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
Cortex-M4f: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m4 -march=armv7e-m -Wno-psabi -mfpu=fpv4-sp-d16 -mfloat-abi=softfp
Cortex-M7: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m7 -Wno-psabi -mfpu=fpv5-sp-d16 -mfloat-abi=softfp
Cortex-M33: -Wl,-static -nostartfiles -mthumb -mno-thumb-interwork -fno-exceptions -fno-rtti -Wl,--gc-sections -mcpu=cortex-m33 -Wno-psabi -mfpu=fpv5-sp-d16 -mfloat-abi=softfp

애셋 생성

프로젝트를 컴파일하려면 애셋(asset)도 반드시 생성해야 합니다. 한 가지 방법은 아래와 같이 'assets’ 옵션을 사용해 생성된 Makefile을 호출하는 것입니다.

make -f TouchGFX/simulator/gcc/Makefile assets

또 다른 방법은 아래와 같이 이미지, 텍스트/폰트 및 비디오 변환 도구를 바로 사용하는 것입니다.

Imageconverter Imageconverter는 프로젝트에서 Linux와 Windows용으로 빌드된 touchgfx 폴더인 Middlewares/ST/touchgfx/framework/tools/imageconvert/build에 있습니다.

usage: imageconvert [-c configfile] [-f inputfile -o outputfile | -r inputdir -w outputdir]

Imageconvert.out 실행 파일을 호출하면 imageconverter가 호출된 폴더에서 configfile(application.config) 파일을 찾습니다.

Textconverter Textconverter는 프로젝트의 touchgfx 폴더인 Middlewares/ST/touchgfx/framework/tools/textconvert에서 ruby 파일 main.rb로 찾을 수 있습니다.

usage: main.rb file.xml path/to/fontconvert.out path/to/fonts_output_dir path/to/localization_output_dir path/to/font/asset calling_path

Videoconverter Videoconverter는 프로젝트의 touchgfx 폴더인 Middlewares/ST/touchgfx/framework/tools/videoconvert에서 ruby 파일 videoconvert.rb로 찾을 수 있습니다.

usage: videoconvert.rb path/to/project_root_dir path/to/video_assets_dir path/to/generated_output_dir

플래싱 및 디버깅

링커 설정에 따라 다르지만 .elf 또는 .hex 파일이 생성될 가능성이 매우 높습니다. TouchGFX 애플리케이션은 대부분 IDE에서 배포하여 디버깅할 수 있습니다. 이때 일반적으로 GDB 서버가 디버깅에 사용되지만 그 밖에 IDE에서 제공하는 방식이 사용되기도 합니다. 사용되는 IDE마다 일일이 포인터를 구체적으로 언급할 수는 없지만 컴파일 및 플래싱 섹션에서 좋은 방법을 찾을 수 있습니다. 여기에는 GCC에서 생성된 ELF/HEX 파일을 사용해 보드를 플래싱하는 방법이 설명되어 있습니다.