주요 내용으로 건너뛰기

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 파일을 사용해 보드를 플래싱하는 방법이 설명되어 있습니다.