🛠 Débogage pas à pas : CMSIS-DAP et Arduino Debug Launcher
Objectifs
Sortir du Serial.print pour debugger : la R4 est la première UNO avec débogueur matériel embarqué. Le pont USB embarqué (HIC) expose une interface CMSIS-DAP branchée sur le SWD du RA4M1, et l'extension officielle Arduino Debug Launcher (VS Code / PlatformIO ou IDE 2.x) permet points d'arrêt, pas à pas, inspection des variables et de la mémoire — exactement comme sur du STM32.
Matériel
- 1 Arduino UNO R4 WiFi + câble USB-C data (sur le port USB-C côté HIC, celui utilisé pour téléverser)
- VS Code avec l'extension Arduino Debug Launcher, ou l'IDE Arduino 2.x avec la fonctionnalité de débogage activée
- Un croquis non trivial : une fonction qui calcule, une boucle, un tableau.
Procédure
- Installez l'extension Arduino Debug Launcher et le composant de débogage proposé (OpenOCD/CMSIS-DAP géré par l'extension).
- Ouvrez le croquis, placez un point d'arrêt sur une ligne de
loop. - Lancez « Start Debugging » : la carte est flashée puis stoppée sur le point d'arrêt.
- Explorez : variables locales, globales, pile d'appels, registres du Cortex-M4, mémoire ; avancez avec pas-à-pas (F10/F11).
// Croquis de test : le bug classique du débordement d'index.
int mesures[8];
int n = 0;
void setup { Serial.begin(115200); }
void loop {
mesures[n] = analogRead(A0); // point d'arrêt ici : surveillez n
n++;
if (n > 8) n = 0; // bug volontaire : devrait être n >= 8
delay(200);
}
Vérification attendue
L'exécution se fige sur le point d'arrêt ; la fenêtre Variables montre n croître. En surveillant le tableau, vous voyez l'écriture hors limites quand n == 8 — le genre de bug invisible en Serial.print. Reprenez (F5), modifiez la condition, reflasher, revérifier : c'est la boucle de débogage complète.
Erreurs fréquentes
- Optimisation du compilateur : avec -O2, des variables « disparaissent » ou le pas-à-pas saute ; passez l'optimisation en -O0 (option de compilation de l'IDE) pour déboguer, puis remettez-la pour la production.
delaypendant le débogage : le débogueur interrompt le core ; le watchdog et le WiFi continuent leur vie côté ESP32-S3 — l'état du système n'est pas figé comme sur une simple pause.- Brancher le câble sur le mauvais port USB-C : le débogage passe par le port relié au HIC ; l'autre port (USB natif du RA4M1) ne fournit pas le CMSIS-DAP.
- Confondre débogueur et moniteur série : pendant une session de débogage, le port série est souvent monopolisé par la session ; utilisez l'autre port USB pour un CDC séparé si besoin.
- Attendre le débogage sur l'ESP32-S3 : le débogueur ne pilote que le RA4M1 ; l'ESP32-S3 n'est pas accessible en pas-à-pas par ce chemin.
Autres tutoriels pour cette carte
- Premier Blink sur la UNO R4 WiFi : la première UNO 32 bits
- Apprivoiser la matrice LED 12x8 intégrée
- Toucher capacitif : touchRead sans composant
- Se connecter au WiFi et lire l'heure NTP (WiFiS3)
- Inclinomètre sur la matrice : l'IMU LSM6DSV16X en I²C
- Serveur web embarqué : piloter la matrice depuis le navigateur
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino