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