🛠 Le core Zephyr : sketches ELF chargés à chaud via llext (fin du reflash complet)
Objetivos
El core ArduinoCore-zephyr está llamado a reemplazar al core Mbed en todos los dispositivos que soporta, incluida la Portenta H7. Su idea: un cargador Zephyr precompilado permanece en la placa, y tu sketch —compilado como un ELF autónomo— es cargado en caliente mediante llext, sin reflash completo ni reinicio. Desde la versión 0.90.0 del core, el cargador se instala automáticamente en la primera subida. Vas a instalar el core, comprender el modelo de carga y utilizar el shell de Zephyr en modo Debug para diagnosticar fallos de carga.
Material
- 1 × Arduino Portenta H7 + cable USB-C de datos
- Arduino IDE 2.x / Arduino CLI con la plataforma «Arduino Zephyr Boards»
- Para la resolución profunda de problemas: adaptador USB-UART en los pines TX0/RX0 (la consola USB puede quedar muda en caso de fallo del SO)
- Consola serie a 115200 baudios
Código completo
// zephyr_blink.ino — API Arduino standard sur Zephyr RTOS
// 1. Installe "Arduino Zephyr Boards" dans le Board Manager
// 2. Choisis Portenta H7 ; le premier upload installe le loader
// automatiquement (core >= 0.90.0, cible arduino_portenta_h7//m7)
// 3. Les uploads suivants chargent le sketch sans reset complet.
#include <Arduino.h>
void setup {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(800);
}
// Astuce du README : compiler en mode Debug pour obtenir le Zephyr
// shell sur la serie par defaut, puis la commande `sketch` lit les
// erreurs de chargement llext.
Verificación esperada
Tras la primera subida (instalación del cargador), las siguientes son casi instantáneas en la placa: el sketch arranca sin el ciclo completo de reflash. En modo Debug, el shell de Zephyr responde por el puerto serie y el comando sketch muestra el estado del ELF cargado —la herramienta de diagnóstico n.º 1 cuando nada arranca. La compilación previa del cargador se realiza con ./extra/build.sh portentah7 (objetivo arduino_portenta_h7//m7).
Errores frecuentes
- El sketch no se carga, sin mensajes: pasa a modo Debug y lee el shell de llext; muchos fallos se deben a símbolos no exportados —la función de Zephyr que necesitas aún no está expuesta a los sketches (la solución alternativa documentada es añadirla mediante
llext_exports.c). - Pila insuficiente durante la carga: la carga a través del shell de Zephyr requiere una pila considerable; en compilaciones ajustadas en RAM, el README recomienda reducir la pila del shell en el .conf de la placa.
- Consola muda tras un fallo del SO: la serie USB depende del firmware activo —aquí es donde el adaptador USB-UART en TX0/RX0 salva la sesión (consejo oficial del README).
- Mezclar el core Mbed y el core Zephyr en la misma placa sin comprenderlo: las APIs, la compatibilidad de las bibliotecas y el modelo de flash difieren; la migración está en curso y no todo está exportado todavía.
- Recuperar una placa «brickada»: doble pulsación de RESET (modo bootloader MCUboot) + «Burn bootloader» en el IDE para partir de una base limpia.
- >
Otros tutoriales para esta placa
- Premier programme : installer le core et faire clignoter la LED (M7 à 480 MHz !)
- Se connecter au Wi-Fi avec le module Murata 1DX (station WPA2)
- Apprivoiser les connecteurs 80 broches : bouton, LED et entrée analogique
- Dual-core M7 ↔ M4 : appels de fonctions distants avec la bibliothèque RPC
- Client HTTPS/TLS : interroger une API sécurisée via le Murata 1DX
- Serveur web sur le port Ethernet 10/100 embarqué
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinopwm-respiration.inoArduinoentree-analogique.inoArduinomulti-uart.inoArduinocapteur-i2c-bmp280.inoArduino