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

STM32 MCU에서 Linux 애플리케이션 실행

스마트 제품을 위한 임베디드 시스템에서 점점 더 많은 기능이 기대됩니다. 이것은 원하는 모든 경우에 소프트웨어를 제공하는 Linux를 사용하여 쉽게 달성할 수 있습니다. 그러나 Linux는 상당히 큰 하드웨어 리소스, 특히 메모리가 필요하므로 대상 플랫폼은 일반적으로 다소 비싸고 전력 소비량이 높습니다. 반면에 최신 마이크로컨트롤러(MCU)에는 많은 스마트 작업에 충분한 리소스가 많이 있습니다. MCU를 비롯한 모든 곳에서 Linux 소프트웨어를 사용할 수 있는 Embox RTOS와 같은 RTOS(실시간 운영 체제)를 사용하여 개발자는 더 저렴하고 전력을 덜 소모하는 스마트 장치를 더 쉽게 개발할 수 있습니다.

이 기사에서는 Embox RTOS를 실행하는 임베디드 MCU에서 기본 Qt 애플리케이션을 실행하는 방법에 대해 설명합니다. 2개의 단일 코어 Cortex-M7 기반 보드(216MHz)를 사용합니다. STM32F746g-Discovery 및 STM32F769i-Discovery는 각각 480×272 및 800×480 화면 해상도의 터치스크린을 갖추고 있습니다.

얼마 전에 우리는 STM32F746-Discovery[참고 1]에서 표준 Qt 예제 'moveblocks'를 시작했습니다. 그러나 우리는 더 나아가 터치스크린으로 예제를 시작하고 싶었습니다. 또 다른 표준 예제인 '애니메이션 타일'을 선택했습니다. 데스크탑에서도 멋지게 보이는 꽤 좋은 예입니다. 인터랙티브하므로 터치스크린을 사용할 수 있으며 3D 애니메이션처럼 보입니다.

우리는 STM32 MCU가 충분한 성능을 제공할 수 있는지 알고 싶었습니다. CPU 속도가 렌더링 장면을 매끄럽게 만들기에 충분한지 확신할 수 없었습니다. 알다시피 800×480 디스플레이에서 화면을 새로 고치는 것조차 비용이 많이 드는 작업이기 때문입니다[참고 2].

건물

우선 Embox의 일부로 애플리케이션을 빌드해 보겠습니다. 이를 수행하는 가장 간단한 방법은 오픈 소스 에뮬레이터인 QEMU용 애플리케이션을 빌드하는 것입니다. QEMU를 사용한다는 것은 이 경우 메모리 소비를 처리할 필요가 없다는 것을 의미합니다. 이렇게 하면 필요한 모든 구성 요소를 사용할 수 있는지 확인하는 데 도움이 됩니다. QEMU에서 '애니메이션 타일'이 시작되었을 때 STM32용 구성 파일에 필요한 구성 요소를 쉽게 추가했습니다.

타겟 보드에서 첫 출시

우리는 대상 보드 STM32F746G-Discovery에서 '애니메이션 타일'을 성공적으로 시작했지만 화면의 상단 절반만 그려졌다는 것을 알았습니다. 물론 보드에서 즉시 디버깅을 통해 문제를 해결할 수도 있지만 더 쉬운 방법이 있습니다. 먼저 Linux 환경에서 예제를 시작하고 디버깅할 수 있습니다.

호스트에서 디버깅

이 예제를 실행하고 애플리케이션을 디버그하려면 Qt 라이브러리 자체와 가상 화면을 제공하는 Qt 애플리케이션인 QVFB가 필요합니다. 공식 문서에 설명된 대로 QVFB를 빌드할 수 있습니다.

그런 다음 필요한 화면 해상도(STM32F746G-Discovery의 경우 480×272)로 QVFB를 시작할 수 있습니다.

./qvfb -너비 480 -높이 272 -nocursor  

또한 '-embedded' 옵션을 사용하여 프로파일이 포함된 Qt 라이브러리를 빌드해야 합니다. 이 옵션은 X11 또는 기존 그래픽 환경 없이 Qt를 실행하도록 설계되었으며 대신 QWS(Qt Windowing System)가 사용됩니다. 또한 다른 불필요한 옵션과 모듈을 비활성화했습니다. 결과 구성 줄은 다음과 같습니다.

./configure -opensource -confirm-license -debug \ -embedded -qt-gfx-qvfb -qvfb \ -no-javascript-jit -no-script -no-scripttools \ -no-qt3support -no -webkit -nomake 데모 -nomake 예제  

마지막으로 '애니메이션 타일'을 빌드하고 시작하겠습니다. 빌드 단계는 Qt(qmake; make; ). 응용 프로그램을 시작할 때 QVFB를 디스플레이로 지정해야 합니다.

./examples/animation/animatedtiles/animatedtiles -qws -디스플레이 QVFb:0  

화면 상단에 같은 사진이 있습니다. 소스 코드(examples/animation/animatedtiles/main.cpp)에서 애플리케이션이 "view->show()"로 시작한다는 것을 발견했습니다. 이는 전체 화면 모드가 아님을 의미합니다. 그 후, 우리는 화면의 상단 절반만 애플리케이션을 표시하는 데 사용된다는 것을 완전히 확신했습니다. '-fullscreen' 옵션을 추가하여 'animatedtiles' 코드를 약간 수정했습니다.

STM32F746 발견 시 출시

Embox에서 수정된 애플리케이션을 빌드하고 QEMU에서 성공적으로 실행되었는지 확인했습니다. 그러나 대상 보드에서 응용 프로그램을 시작할 때 "메모리 부족" 오류가 발생했습니다. 이는 구성의 힙 크기가 애플리케이션에 충분하지 않음을 의미합니다. 우리는 Linux의 풍부한 개발 도구를 사용하여 필요한 힙 크기를 추정하는 문제를 해결하기로 결정했습니다.

우리는 valgrind로 애플리케이션을 시작했습니다. Valgrind는 메모리 디버깅 및 프로파일링을 위한 도구이고 Massif는 힙 프로파일러입니다(Valgrind의 일부임).

$ valgrind --tool=massif --massif-out-file=animatedtiles.massif./examples/animation/animatedtiles/animatedtiles -qws -전체 화면 $ ms_print animatedtiles.massif> animatedtiles.out  

그리고 응용 프로그램에 약 2.7MB 힙 크기의 힙 크기가 필요하다는 것을 알았습니다.

Embox 구성에서 힙 크기를 3MB로 설정하고 데모를 다시 시작했습니다. 전체 화면 모드에서 성공적으로 실행되었습니다.

STM32F769I-Discovery에서 시작합니다.

우리는 또한 유사한 보드에서 더 큰 디스플레이로 예제를 시도하고 싶었습니다. 이 예에서는 800×480 디스플레이 해상도의 STM32F769I-Discovery를 사용했습니다. 이 경우 16비트 컬러 모드(800x480x2=768000)에서 프레임 버퍼용으로 거의 1MB가 필요하지만 이 보드에는 충분한(16MB) 외부 SDRAM이 있습니다. 따라서 힙의 크기만 추정하면 됩니다.

새로운 해상도(800×480)로 QVFb를 시작했습니다.

$./qvfb -너비 800 -높이 480 -nocursor & 

그리고 이전 시간으로 valgrind를 사용하십시오.

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

우리는 약 6MB가 필요하다는 것을 알았습니다. 6MB 힙 크기를 설정하고 STM32F769I 보드에서 'animatedtimes'를 성공적으로 시작했습니다.


그림 1:Embox RTOS 아래 STM32F769I-DISCOVERY 보드의 QT 애니메이션 타일 예. (출처:엠박스)

이 비디오(아래)에서 작동 방식을 볼 수 있으며 github 위키에 설명된 대로 결과를 직접 재현할 수 있습니다.

참고:

<올>
  • https://habr.com/ru/company/embox/blog/459730/](러시아어이지만 타사 영어 번역에서도 사용 가능:https://sudonull.com/ post/25508-Porting-Qt-to-STM32-Embox-Blog
  • https://alexkalmuk.medium.com/a-little-about-graphics-subsystem-internals-on-microcontrollers-d952cfd0966a

  • 안톤 본다레프 Embox RTOS의 창립자입니다. Anton은 2003년 LETI(Saint Petersburg Electrotechnical University)에서 전기 공학 석사 학위를 취득하고 소프트웨어 엔지니어링을 전문으로 하는 Saint-Petersburg State University에서 대학원 과정에 참석했습니다. 임베디드 및 시스템 프로그래밍 분야에서 20년 이상의 경력을 가지고 있습니다. 알렉산더 칼무크 Embox RTOS의 공동 설립자입니다. Alexander는 2014년에 상트페테르부르크 주립대학교에서 수학과 소프트웨어 공학 석사 학위를 취득했으며 제어 이론을 전문으로 하는 상트페테르부르크 주립대학교에서 대학원 과정에 다녔습니다. 임베디드 시스템 프로그래밍 분야에서 10년 이상의 경력을 가지고 있습니다.

    관련 콘텐츠:

    더 많은 Embedded를 보려면 Embedded의 주간 이메일 뉴스레터를 구독하세요.


    임베디드

    1. Linux의 클라우드 컴퓨팅 가이드
    2. Linux 클라우드 호스팅 대 Windows 클라우드 호스팅
    3. 용도별 염료 분류
    4. ST, Linux 배포판과 함께 STM32MP1 마이크로프로세서 시리즈 출시
    5. 전원 관리 IC는 애플리케이션 프로세서 제품군을 지원합니다.
    6. 센서 텔레메트리 2.0.1
    7. Java 10 - 클래스 데이터 공유
    8. 실행 채권이란 무엇입니까?
    9. PLCnext의 클러스터 관리?
    10. PLCnext Control의 Java 애플리케이션