산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

Embox RTOS로 STM32 MCU에서 Qt 실행하기: 실전 성능 가이드

배경

임베디드 시스템은 점점 더 풍부한 기능을 제공해야 하는 요구에 직면해 있습니다. 리눅스는 방대한 라이브러리와 도구 생태계를 갖추고 있지만, 특히 메모리 측면에서의 하드웨어 요구사항이 비용과 전력 소모를 증가시키는 경우가 많습니다. STM32 시리즈와 같은 최신 마이크로컨트롤러(MCU)는 많은 스마트 애플리케이션에 충분한 리소스를 제공하면서도 저렴하고 에너지 효율적입니다.

Qt 애플리케이션 빌드 및 검증

이전에는 STM32F746-Discovery 보드에서 Qt 'moveblocks' 예제를 시연한 바 있습니다. 이번에는 대화형 3D 스타일 그래픽을 제공하며 터치스크린에 적합한 'animatedtiles' 예제로 확장했습니다. MCU의 CPU와 메모리가 480×272 또는 800×480 디스플레이에서 부드러운 렌더링을 유지할 수 있는지 평가하고자 했습니다.

QEMU에서 애플리케이션 빌드

먼저 Qt 예제를 오픈소스 에뮬레이터인 QEMU용으로 빌드했습니다. QEMU에서 앱을 실행하면 메모리를 미리 할당할 필요가 없어 모든 종속성이 갖춰져 있는지 확인할 수 있습니다. 검증이 완료되면 STM32 구성 파일에 필요한 구성 요소를 추가했습니다.

타겟 보드에서 최초 실행

애플리케이션은 STM32F746G-Discovery에서 시작되었지만 화면의 상단 절반만 채워졌습니다. 보드에서 직접 디버깅하는 것도 가능하지만, 호스트 환경을 활용해 초기 디버깅을 수행하는 것이 더 효율적입니다.

호스트 환경에서의 디버깅

예제를 실행하고 디버깅하려면 Qt 라이브러리와 QVFB(Qt Virtual Framebuffer)를 설치해야 합니다. QVFB는 Qt가 렌더링할 수 있는 가상 디스플레이를 제공합니다. 공식 지침에 따라 QVFB를 빌드하세요.

보드 해상도에 맞춰 QVFB 실행

./qvfb -width 480 -height 272 -nocursor

임베디드 프로파일로 Qt 컴파일 (X11 비활성화) 및 불필요한 모듈 제외

./configure -opensource -confirm-license -debug \
 -embedded -qt-gfx-qvfb -qvfb \
 -no-javascript-jit -no-script -no-scripttools \
 -no-qt3support -no-webkit -nomake demos -nomake examples

QVFB로 animatedtiles 빌드 및 실행

./examples/animation/animatedtiles/animatedtiles -qws -display QVFb:0

애플리케이션이 다시 화면 상단 절반만 차지하는 것을 확인했습니다. examples/animation/animatedtiles/main.cpp를 검토한 결과, 뷰가 윈도우 모드로 표시되도록 설정되어 있었습니다. -fullscreen 플래그를 추가하면 이 문제가 해결됩니다.

STM32F746-Discovery에 배포

소스 코드를 수정한 후 Embox용으로 애플리케이션을 다시 빌드하고 QEMU에서 실행했습니다. 실제 보드에서 실행할 때 'Out Of Memory' 오류가 발생해 힙 크기가 부족함을 알 수 있었습니다. 필요한 크기를 파악하기 위해 Valgrind의 Massif 도구를 사용했습니다.

valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
ms_print animatedtiles.massif > animatedtiles.out

Massif 분석 결과 약 2.7MB의 힙이 필요하다고 나왔습니다. Embox 구성에서 힙을 3MB로 늘리니 데모가 전체 화면으로 실행되었습니다.

STM32F769I-Discovery에 배포

STM32F769I-Discovery는 800×480 디스플레이와 16MB의 외부 SDRAM을 갖추고 있습니다. 프레임버퍼만 약 0.8MB(800×480×2바이트)를 소비합니다. 힙 크기만 조정하면 됩니다.

더 큰 해상도로 QVFB 시작

./qvfb -width 800 -height 480 -nocursor &

Massif로 다시 분석

valgrind --tool=massif --massif-out-file=animatedtiles.massif ./examples/animation/animatedtiles/animatedtiles -qws -fullscreen
ms_print animatedtiles.massif > animatedtiles.out

Massif는 약 6MB의 힙을 보고했습니다. 힙을 6MB로 구성하면 STM32F769I 보드에서 전체 화면 작동이 가능해집니다.

Embox RTOS로 STM32 MCU에서 Qt 실행하기: 실전 성능 가이드

아래 동영상에서 데모를 시청하거나 GitHub 위키의 단계를 따라 결과를 재현해 보세요.

참고 자료

  1. https://habr.com/ru/company/embox/blog/459730/ (러시아어, 영어 버전도 제공: https://sudonull.com/post/25508-Porting-Qt-to-STM32-Embox-Blog)
  2. https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a

Embox RTOS로 STM32 MCU에서 Qt 실행하기: 실전 성능 가이드

Anton Bondarev는 Embox RTOS의 창립자입니다. 2003년 상트페테르부르크 전기기술대학교(LETI)에서 전기공학 석사 학위를 취득했고, 이후 상트페테르부르크 국립대학교에서 소프트웨어 공학 박사 과정을 수료했습니다. 임베디드 및 시스템 프로그래밍 분야에서 20년 이상의 경력을 쌓으며 Embox 프로젝트를 이끌고 있습니다.

Embox RTOS로 STM32 MCU에서 Qt 실행하기: 실전 성능 가이드

Alexander Kalmuk은 Embox RTOS의 공동 창립자입니다. 2014년 상트페테르부르크 국립대학교에서 수학 및 소프트웨어 공학 석사 학위를 취득하고 제어 이론 박사 과정을 밟았습니다. 10년 이상의 임베디드 시스템 프로그래밍 경험을 바탕으로 Embox 개발의 핵심 기여자로 활동하고 있습니다.


관련 콘텐츠

더 많은 임베디드 소식을 원하시면 Embedded의 주간 이메일 뉴스레터를 구독하세요.

임베디드

  1. Linux가 클라우드를 움직이는 이유: 종합 가이드
  2. Linux 클라우드 호스팅 vs Windows 클라우드 호스팅: 비즈니스에 맞는 선택은?
  3. 용도별 염료 분류: 반응성부터 분산성까지 업계 개요
  4. ST, STM32MP1 출시… 듀얼 코어 Arm Cortex MP1, OpenSTLinux와 저전력 성능으로 에지 디바이스 강화
  5. ROHM, NXP i.MX 8M Nano 프로세서용 BD71850MWV PMIC 출시
  6. 센서 텔레메트리 2.0.1: Azure IoT Hub를 활용한 고급 온도 모니터링
  7. Java 10: 클래스 데이터 공유(CDS)로 성능 향상
  8. 러닝 본드(줄눈 쌓기): 필수 벽돌 쌓기 기법
  9. PLCnext에서 클러스터 관리: Kubernetes로 산업 자동화 활용하기
  10. Jlink로 PLCnext Control에서 Java 9 앱 최적화하기