Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Een Linux-toepassing uitvoeren op STM32 MCU's

Van embedded systemen voor slimme producten wordt steeds meer functionaliteit verwacht. Dit kan eenvoudig worden bereikt met Linux, dat software biedt voor elk geval dat u wenst. Maar Linux vereist vrij grote hardwarebronnen, met name geheugen, dus het doelplatform zal doorgaans vrij duur zijn en een hoog stroomverbruik hebben. Aan de andere kant hebben moderne microcontrollers (MCU's) veel middelen die genoeg zijn voor veel slimme taken. Met behulp van een realtime besturingssysteem (RTOS) zoals Embox RTOS, waarmee Linux-software overal kan worden gebruikt, inclusief MCU's, kunnen ontwikkelaars gemakkelijker slimme apparaten ontwikkelen die minder duur zijn en minder stroom verbruiken.

In dit artikel bespreken we het starten van een standaard Qt-toepassing op een embedded MCU met de Embox RTOS. We gebruiken twee single-core Cortex-M7-gebaseerde boards (216MHz):STM32F746g-Discovery en STM32F769i-Discovery, die touchscreens hebben met respectievelijk 480×272 en 800×480 schermresolutie.

Enige tijd geleden zijn we erin geslaagd om een ​​standaard Qt-voorbeeld 'moveblocks' te lanceren op STM32F746-Discovery [Opmerking 1]. We wilden echter verder gaan en een voorbeeld lanceren met een touchscreen. We kozen voor een ander standaardvoorbeeld, ‘animatedtiles’. Het is een vrij aardig voorbeeld dat er zelfs op desktops cool uitziet. Het is interactief, daarom kunnen we een touchscreen gebruiken en het ziet er ook uit als 3D-animatie.

We wilden weten of de STM32 MCU voldoende prestaties kan leveren. We wisten niet zeker of de snelheid van de CPU voldoende zou zijn om die weergavescène vloeiend te laten verlopen, aangezien we ontdekten dat zelfs het vernieuwen van het scherm voor een 800×480-scherm een ​​dure operatie is [Opmerking 2].

Gebouw

Laten we allereerst onze applicatie bouwen als onderdeel van Embox. De eenvoudigste manier om dit te doen, is door de applicatie voor QEMU te bouwen, een open source-emulator. Het gebruik van QEMU betekent dat we in dit geval niet voor geheugengebruik hoeven te zorgen. Dit zal ons helpen ervoor te zorgen dat alle benodigde componenten beschikbaar zijn. Toen 'animatedtiles' op QEMU was gestart, hebben we eenvoudig de benodigde componenten toegevoegd aan configuratiebestanden voor de STM32.

Eerste lancering op het doelbord

We zijn met succes begonnen met 'animatedtiles' op ons doelbord STM32F746G-Discovery, maar we merkten dat alleen de bovenste helft van het scherm werd getekend. Natuurlijk kunnen we proberen het probleem op te lossen door onmiddellijk op het bord te debuggen, maar er is een eenvoudigere manier:we kunnen het voorbeeld eerst starten en debuggen in de Linux-omgeving.

Foutopsporing op host

Om dit voorbeeld uit te voeren en fouten in uw toepassing op te sporen, hebt u de Qt-bibliotheek zelf nodig, evenals QVFB, een Qt-toepassing die een virtueel scherm biedt. U kunt QVFB bouwen zoals beschreven in de officiële documentatie.

Vervolgens kunt u QVFB starten met de vereiste schermresoluties (480×272 voor STM32F746G-Discovery):

./qvfb -breedte 480 -hoogte 272 -nocursor  

Je moet ook een Qt-bibliotheek bouwen met een ingesloten profiel, namelijk met de optie '-embedded'. Deze optie is ontworpen om Qt uit te voeren zonder X11 of bestaande grafische omgevingen, in plaats daarvan zal QWS (Qt Windowing System) worden gebruikt. Ook hebben we enkele andere onnodige opties en modules uitgeschakeld. De resulterende configuratieregel was de volgende:

./configure -opensource -confirm-license -debug \ -embedded -qt-gfx-qvfb -qvfb \ -no-javascript-jit -no-script -no-scripttools \ -no-qt3support -no -webkit -nomake demo's -nomake voorbeelden  

Laten we tot slot 'animatedtiles' bouwen en starten. De bouwfase is zoals gebruikelijk voor Qt (qmake; make; ). U moet QVFB specificeren als een weergave bij het starten van de applicatie:

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

We kregen hetzelfde beeld in de bovenste helft van het scherm. We hebben in de broncode (examples/animation/animatedtiles/main.cpp) gevonden dat de applicatie begint met "view->show()", dat wil zeggen niet in de modus voor volledig scherm. Daarna waren we er volledig van overtuigd dat alleen de bovenste helft van het scherm werd gebruikt om de applicatie weer te geven. We hebben de code van 'animatedtiles' een beetje aangepast door de optie '-fullscreen' toe te voegen.

Lancering op STM32F746-discovery

We hebben onze aangepaste applicatie in Embox gebouwd en gecontroleerd of deze met succes op QEMU draaide. Maar toen we de applicatie op het doelbord lanceerden, ontvingen we de foutmelding "Geheugen vol". Het betekent dat de grootte van de heap in onze configuratie niet genoeg is voor de toepassing. We hebben besloten om uitgebreide ontwikkelingstools in Linux te gebruiken om het probleem op te lossen, d.w.z. het schatten van de vereiste heapgrootte.

We waren onze applicatie begonnen met valgrind. Valgrind is een tool voor geheugenfoutopsporing en profilering, Massif is een heapprofiler (het is een onderdeel van Valgrind).

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

En ontdekte dat de applicatie een heap-grootte van ongeveer 2,7 MB heap-grootte nodig had.

We hebben de heapgrootte ingesteld op 3 MB in Embox-configuratie en zijn onze demo opnieuw gestart. Het draaide met succes in de modus voor volledig scherm.

Lancering op STM32F769I-Discovery.

We wilden het voorbeeld ook op een soortgelijk bord proberen, maar met een groter scherm. In dit voorbeeld werd de STM32F769I-Discovery gebruikt met een schermresolutie van 800 × 480. In dit geval heeft het bijna 1MB alleen nodig voor de framebuffer in 16bits kleurmodus (800x480x2=768000), maar er is genoeg (16MB) extern SDRAM op dit bord. We hoeven dus alleen de grootte van de hoop in te schatten.

We zijn QVFb begonnen met de nieuwe resoluties (800×480):

$./qvfb -breedte 800 -hoogte 480 -nocursor & 

En gebruik valgrind zoals de vorige keer:

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

We hadden ontdekt dat het ongeveer 6 MB nodig heeft. We hadden een heapgrootte van 6 MB ingesteld en 'animatedtimes' met succes gelanceerd op het STM32F769I-bord.


Figuur 1:Voorbeeld van QT Animationtiles op STM32F769I-DISCOVERY-bord onder Embox RTOS. (Bron:Embox)

Je kunt zien hoe het werkt in deze video (hieronder) en je kunt de resultaten zelf reproduceren zoals beschreven op onze github-wiki.

Opmerkingen:

  1. https://habr.com/ru/company/embox/blog/459730/] (in het Russisch, maar ook beschikbaar in een Engelse vertaling van derden: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

Anton Bondarev is de oprichter van Embox RTOS. Anton studeerde in 2003 af aan de elektrotechnische universiteit van Sint-Petersburg (LETI) met een master in elektrotechniek en volgde postdoctorale cursussen aan de Staatsuniversiteit van Sint-Petersburg, gespecialiseerd in software-engineering. Hij heeft meer dan 20 jaar ervaring in embedded en systeemprogrammering. Alexander Kalmuk is de medeoprichter van Embox RTOS. Alexander studeerde in 2014 af aan de Staatsuniversiteit van Sint-Petersburg met een master in wiskunde en software-engineering en volgde postdoctorale cursussen aan de Staatsuniversiteit van Sint-Petersburg, gespecialiseerd in regeltheorie. Hij heeft meer dan 10 jaar ervaring in het programmeren van embedded systemen.

Verwante inhoud:

  • Linux gebruiken met kritieke toepassingen:zoals het mengen van olie en water?
  • Waarom het Yocto-project voor mijn IoT-project?
  • Anticiperen op behoefte aan Automotive Grade Linux-expertise
  • MCU maakt Linux mogelijk voor industrieel IoT
  • Open-sourceplatform richt zich op IoT met embedded Linux
  • Geïntegreerde Linux-apparaatstuurprogramma's:hun rol begrijpen
  • OTA-updates voor Embedded Linux, deel 1 – Grondbeginselen en implementatie
  • Een beveiligde ingebouwde webserver installeren op een WiFi-apparaat van $ 3
  • Beheers de oneindige levenscyclus van softwareontwikkeling van verbonden systemen - of het zal u onder de knie krijgen

Abonneer u voor meer Embedded op de wekelijkse e-mailnieuwsbrief van Embedded.


Ingebed

  1. Toepassing van niobium in de stomatologie
  2. Een gids voor cloudcomputing op Linux
  3. Linux Cloud Hosting versus Windows Cloud Hosting
  4. Classificatie van kleurstoffen per toepassing
  5. ST lanceert STM32MP1-microprocessorserie met Linux-distributie
  6. Energiebeheer-IC ondersteunt toepassingsprocessorfamilie
  7. Sensortelemetrie 2.0.1
  8. Java 10 - Klasse-gegevens delen
  9. Wat is Running Bond?
  10. Clusterbeheer op PLCnext?
  11. Java-toepassing op PLCnext Control