Sortie de la version bêta d’Arduino Core pour Zephyr – Essayons !

Arduino Zephyr Boards llext

En juillet dernier, Arduino a annoncé son intention de passer du Arm Mbed, bientôt obsolète, à Zephyr RTOS, et la société a maintenant publié la première version bêta de « Arduino Core for Zephyr OS » pour une gamme de cartes.

Du point de vue de l’utilisateur, cela ne devrait rien changer. Cependant, il y a des changements massifs sous le capot et les croquis Arduino sont construits et exécutés différemment avec l’Arduino Core pour Zephyr. Voici quelques points forts de la nouvelle implémentation principale Arduino basée sur Zephyr :

  • Chargement dynamique des esquisses – Les esquisses sont compilées sous forme de fichiers ELF et chargées dynamiquement par un micrologiciel précompilé basé sur Zephyr.
  • Les sous-systèmes Zephyr prennent en charge le threading, la communication inter-processus et la planification en temps réel.
  • Compilation rapide et binaires plus petits puisqu’une fine couche de code utilisateur et de bibliothèques sont compilées, alors que le reste de ZephyrOS est déjà binaire.

Vous pouvez commencer immédiatement avec le code et les instructions sur GitHub. Vous aurez besoin d’Arduino 2.xx pour que cela fonctionne. J’ai moi-même essayé les instructions avec Arduino 2.3.2.

La première étape consiste à ajouter « https://downloads.arduino.cc/packages/package_zephyr_index.json » au champ « URL du gestionnaire de cartes supplémentaires » dans la fenêtre Préférences.

URL du gestionnaire de carte Arduino Zephyr

Nous pouvons ensuite rechercher Zephyr dans l’onglet Boards Manager et installer « Arduino Zephyr Boards (llext) ».

Cartes Arduino Zephyr llext

La description mentionne que cinq cartes sont prises en charge à ce stade : Arduino Portenta H7 (STM32H7), Arduino GIGA R1 (STM32H7), Arduino Nano 33 BLE (Nordic Semi nRF52840), kit d’évaluation Renesas EK-RA8D1 (Renesas RA8D1) et NXP FRDM- Carte de développement MCXN947 pour microcontrôleurs MCX N94/N57.

Lorsque nous recherchons une carte, nous verrons maintenant les cartes « Arduino Mbed OS » et « Arduino Zephyr ». J’ai sélectionné « Arduino Portenta H7 – Arduino Zephyr Board… ».

Carte Arduino Zephyr Arduino Portenta H7

Alternativement, nous pouvons simplement taper Zephyr pour répertorier toutes les cartes prises en charge.

Liste des cartes Arduino IDE Zephyr

L’Arduino Portenta H7 (Zephyr) s’affichera toujours sous le nom d’Arduino Portenta H7 en haut à droite de l’IDE Arduino. Comme je n’ai aucune des cartes prises en charge, j’ai juste essayé de compiler le sketch Blink

Arduino Zephyr clignote

Cela a simplement fonctionné et je n’ai vu aucune différence par rapport à la compilation de l’échantillon Blink avec le noyau Arduino basé sur Mbed OS, sauf que par défaut, il n’y a aucune sortie dans la console pour la version Mbed OS. Si j’active la compilation verbeuse. Nous pouvons voir comment les binaires sont construits différemment :

Fichier copié et enregistré sous /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.llext.dfu

/home/jaufranc/.arduino15/packages/zephyr/tools/arm-zephyr-eabi/0.16.8/bin/arm-zephyr-eabi-size -A /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.elf

Sketch utilise 1 834 octets (0 %) d’espace de stockage du programme. Le maximum est de 786 432 octets.

Les variables globales utilisent 2 652 octets (0 %) de mémoire dynamique, laissant 520 972 octets pour les variables locales. Le maximum est de 523 624 octets.

La liste des fichiers et les tailles sont également différentes :

Système d’exploitation MB :

jaufranc@Raspberryme-LAPTOP-5:~/Arduino/Blink$ ls -lh /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.hex

-rw-rw-r– 1 jaufranc jaufranc 432K 9 décembre 16:54 /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.hex

Système d’exploitation Zephyr :

jaufranc@Raspberryme-LAPTOP-5:~/Arduino/Blink$ ls /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.hex -lh

-rw-rw-r– 1 jaufranc jaufranc 5.2K 9 décembre 16:47 /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.hex

jaufranc@Raspberryme-LAPTOP-5:~/Arduino/Blink$ ls -lh /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.elf

-rw-rw-r– 1 jaufranc jaufranc 177K 9 décembre 16:57 /tmp/arduino/sketches/6D61A2814BC7A0AC8783304398ED4368/Blink.ino.elf

Je suppose que Blink.ino.hex pour Zephyr est uniquement l’application et que le binaire final à télécharger est Blink.ino.elf (177 Ko). C’est bien plus petit que les 432 Ko utilisés par la démo de Mbed Blink. Les deux sont de taille assez énorme pour une démo Blink par rapport à une programmation nue, mais c’est le coût de l’utilisation d’un RTOS.

Comme mentionné dans le titre et l’introduction, le noyau Arduino pour Zephyr est toujours en version bêta et certaines démos contenant des bibliothèques ne seront pas compilées correctement.

L'esquisse DHT échoue Arduino Zephyr

Un tel exemple est le croquis 10_TEMP_HUMI.ino qui ne parvient pas à générer l’erreur suivante :

/home/jaufranc/Arduino/libraries/DHT_sensor_library/DHT.cpp : Dans le constructeur ‘DHT::DHT(uint8_t, uint8_t, uint8_t)’ :

/home/jaufranc/Arduino/libraries/DHT_sensor_library/DHT.cpp:51:7 : erreur : ‘microsecondsToClockCycles’ n’a pas été déclaré dans ce scope

51 | microsecondesToClockCycles(1000); // Délai d’expiration de 1 milliseconde pour

| ^~~~~~~~~~~~~~~~~~~~~~~~~

état de sortie 1

Erreur de compilation : état de sortie 1

Mais si je passe à Arduino Portenta H7 – Mbed OS, le même croquis se construit sans problème. Les responsables de la bibliothèque Arduino auront du travail à faire, et c’est probablement la raison pour laquelle le code Arduino pour Zephyr OS a été publié en version bêta. La plupart des utilisateurs finaux devraient probablement continuer à utiliser le code Arduino pour Mbed OS pour le moment.

Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

YouTube video