그래픽과 관련된 프로젝트 개발을 용이하게 하고, 제한된 하드웨어 성능으로도 고급 UI를 만들 수 있도록 최적화된 그래픽 솔루션이 등장했다.
스와이프·3D 등 애니메이션 지원
코딩 없이 GUI 생성 가능
그래픽과 관련된 프로젝트 개발을 용이하게 하고, 제한된 하드웨어 성능으로도 고급 UI를 만들 수 있도록 최적화된 그래픽 솔루션이 등장했다.
ST 마이크로일렉트로닉스는 10일 e4ds 웨비나에서 STM32 마이크로컨트롤러에 최적화된 무료 그래픽 프레임워크인 TouchGFX 기능에 대해 발표했다.
TouchGFX 솔루션은 디자이너, 제너레이터(Generator), 엔진 총 3가지 요소로 구성된 그래픽 솔루션이다.
TouchGFX 디자이너는 GUI를 설계하는 데 사용된다. GUI 소프트웨어는 WYSIWYG(What you see is what you get) 접근 방식을 이용하기 때문에 코딩 없이 GUI를 생성할 수 있다. 디자이너는 소프트웨어 내부에서 만든 UI에 따라 코드를 생성한다. 시뮬레이터를 실행해 대상 보드에 코드를 다운로드하기 전에 UI가 어떻게 보이는지 확인 가능하며 위젯, 상호 작용 등 사용자가 원하는 것을 만들어 낼 수 있다. GUI 코드는 임베디드 그래픽에 적합한 C++ 프로그래밍 언어로 작성됐다.
TouchGFX Generator는 디스플레이 장치의 인터페이스, 컬러 뎁스(Color Depth), 프레임 버퍼 수 및 위치 등 UI 프로젝트에 대한 설정을 구성해준다. 또 프레임 버퍼, 디스플레이 해상도, Color depth, non-mapped memory, 선호하는 IDE를 구성할 수 있으며 FreeRTOS와 같은 운영체제를 사용하는 경우에도 구성할 수 있다.
TouchGFX 엔진은 UI 디스플레이를 구동하게 만드는 라이브러리다. TouchGFX 엔진은 높은 수준의 GUI 성능을 실현하기 위해 MCU에 최적화되어 있다. 하드웨어 가속기의 사용과 연산 메모리의 최적화를 통해 MCU 부하와 메모리 풋프린트를 최소화했다. 디스플레이에 그릴 픽셀 수를 최소화하는 고급 랜더링 알고리즘도 포함되어 있다. 메모리 효율적인 위젯들 덕분에 저성능 하드웨어에서도 부드러운 GUI를 만들 수 있다.
이 그림은 TouchGFX 프로젝트 내부의 코드 구조에 대한 개요다.
엔진 레이어는 TouchGFX에서 제공하는 표준 클래스에 해당된다. 헤더 파일은 볼 수 있지만 소스 파일은 볼 수 없다는 특징을 가지고 있다. 생성된 레이어는 TouchGFX 디자이너가 코드를 생성할 때마다 재생성되는 파일에 해당하기 때문에 클래스와 피일은 수동으로 편집해서는 안 된다. 수동 변경 사항은 추후에 코드 생성기를 실행할 때 덮어씌이기 때문이다.
User 레이어에 있는 클래스는 사용자 코드를 위한 클래스다. 사용자는 이 레이어에 코드를 자유롭게 넣을 수 있다. 존재하지 않으면 사용자 클래스가 생성되지만, TouchGFX 디자이너에 의해 변경되지는 않는다.
첫 번째 열(Column)은 UI의 모양을 관리하는 View다.
Presenter는 Model과 View를 연결하고 UI의 로직을 담당한다.
화면 전환을 만들어내는 Frontend 애플리케이션은 프레임 버퍼에 픽셀을 그리는 방법을 수정할 수 있으며 Frontend 애플리케이션의 생성자를 사용하여 런타임에 폰트를 설치하거나 동적 비트맵에 대한 일부 캐시 메모리를 초기화할 수 있다.
모든 기록을 처리하는 Frontend Heap은 적절한 양의 메모리가 할당되었는지 확인한다. Map 파일에서 검색하면 Frontend Heap에서 가장 큰 화면에 필요한 메모리양을 알 수 있다.
TouchGFX Abstract 레이어는 터치 좌표 및 버튼과 같은 입력을 수집하고, 입력과 UI 상태에 따라 장면을 업데이트하고 프레임 버퍼에 렌더링한다. 또, 디스플레이 – MCU 동기화, 디스플레이로의 전송, 프레임 버퍼 제어 및 액세스를 처리하고, 사용자가 원하는 경우 렌더링 프로세스를 모니터링한다.
선택한 디스플레이 인터페이스에 따라 TouchGFX에 의해 코드가 부분적 또는 전체적으로 생성된다. 부분적으로 생성됐을 경우에는 TouchGFX를 디스플레이 시스템에 올바르게 연결하려면 직접 코딩을 해야 한다.
한편 RTOS가 필요한지에 대한 질문에 ST는 MCU가 GUI 어플리케이션만 구동하는 것이 아니라 다른 task 또한 구동해야 하는 경우라면 가능한 RTOS를 사용하는 것을 권장한다고 전했다.