Arduino IDE: pourquoi les esquisses ne se compilent pas (et comment éviter cela)
Comme je me développe intensément dans l'IDE Arduino, cette question m'a vraiment inquiété. Pourquoi un croquis écrit dans une version de l'environnement de développement refuse-t-il de compiler dans les versions voisines? Les utilisateurs d' Arduino Mega Server m'ont submergé par la même question . Pourquoi l'AMC compile-t-il en 1.6.5 et refuse-t-il de compiler en 1.6.4, 1.6.7 et 1.6.8?Et récemment, dans le processus de portage du Arduino Mega Server vers le nouveau contrôleur Genuino 101, j'ai pu résoudre ce grand mystère. Et dans cet article, je partagerai cette connaissance sacrée avec vous et vos croquis après avoir toujours été compilés avec succès. Alors ...Logique des choses
Logiquement, le code qui se compile avec succès dans n'importe quelle version de l'environnement de développement, par exemple 1.6.5, doit être compilé dans les versions voisines de l'IDE, car ces versions ne diffèrent que par le troisième caractère et sont presque les mêmes, avec des modifications mineures . Mais cela ne se produit pas. Pourquoi?Cuisine domestique
Pour comprendre cela, vous devez comprendre comment les versions des environnements de développement Arduino IDE sont formées et comment les utilisateurs travaillent avec ces environnements de développement.Commençons par les utilisateurs. La plupart d'entre eux compilent des projets primitifs, au sens figuré, en 20 lignes et il n'y a aucun problème avec ces projets. Ces projets sont compilés avec succès dans n'importe quelle version de l'EDI car ils utilisent uniquement des appels de fonction de bibliothèque standard et ne modifient pas les bibliothèques elles-mêmes.Mais un projet quelque peu développé sur Arduino ne s'inscrit plus dans les «20 lignes» et utilise inévitablement des fonctions moins communes des bibliothèques (qui sont plus susceptibles de modifications de version en version) et viennent inévitablement à la nécessité de modifier les bibliothèques elles-mêmes pour leurs besoins spécifiques du projet.Et une fois que vous avez modifié la bibliothèque système, vous devenez un otage et êtes obligé de la "faire glisser" avec vous d'une version à l'autre.Voyons maintenant comment les versions de l'IDE Arduino sont formées. Et ils sont formés arbitrairement (je soupçonne qu'au final, un programmeur spécifique, un certain Mario) de l'équipe émettrice. Et quelle version d'une bibliothèque particulière sera incluse dans le kit de distribution et sous quelle forme (avec quelles modifications) reste sur la conscience de ce «Mario».Et maintenant attention, c'est très important! L'équipe de publication n'a qu'un seul objectif - que la distribution d'une version soit mutuellement convenue et cohérente en elle-même. Leur tâche est de s'assurer que tous les exemples standard fonctionnent correctement. Et c'est tout! La tâche de compatibilité entre les versions ne se pose pas du tout.Et puisque 99% des utilisateurs compilent des projets en «20 lignes», cette approche «roule» parfaitement dans la pratique. Et le fait qu'aucun projet sérieux ne soit compilé est le problème de ces projets. Dieu merci, le mécanisme de l'occurrence du problème est maintenant clair, et maintenant il est devenu clair comment y faire face.Exemple concret
Rappelons le portage d'AMS vers Genuino 101 (il fonctionne à partir de la version 1.6.7 et supérieure). Ici, l'équipe Arduino a stocké une autre blague pour nous (bravo les gars, ils ne nous laissent pas nous détendre).Une tentative de compilation du projet pour le nouveau contrôleur a conduit à de nombreuses erreurs de compilation. L'analyse des messages a montré que le compilateur déteste fortement notre bibliothèque Ethernet. Pourquoi n'a-t-elle pas plu au compilateur?Nous commençons à comprendre.Notre bibliothèque: version = 1.0.4 (n'aime pas le compilateur)Bibliothèque d'IDE 1.6.7: version = 1.0.4 (comme le compilateur)Cependant.Notre bibliothèque: 31 fichiers (n'aime pas le compilateur)Bibliothèque du fichier IDE 1.6.7: 31 (comme le compilateur)Cependant.Notre bibliothèque: 123 Ko (n'aime pas le compilateur)Bibliothèque d'IDE 1.6.7: 123 Ko (comme le compilateur)Cependant.En d'autres termes, Mario a «bloqué» une bibliothèque Ethernet IDE 1.6.7 avec le même numéro de version que dans IDE 1.6.5, le même nombre de fichiers et la même taille, mais avec un CONTENU DIFFÉRENT et oublié nous en avertir. Et c'est le contenu le plus «différent», comme une araignée qui conserve son IDE et d'autres bibliothèques de niveau inférieur (également modifiées en 1.6.7).Bravo, Mario! Avec cette approche, rien ne sera compilé à l'exception des exemples standard et des croquis de 20 lignes.Solution pratique (puzzles d'Arduino)
Désormais, le mécanisme expliquant pourquoi les projets ne sont pas compilés dans différentes versions de l'IDE Arduino est devenu limpide et, en conséquence, la façon de résoudre ce problème est devenue limpide. Dans ce cas particulier, la solution se compose de trois parties.- Première partie Trouver une bibliothèque fonctionnelle. Rappelez-vous, la tâche de l'équipe émettrice de créer une version cohérente de l'IDE? Il doit donc y avoir quelque part une version fonctionnelle de la bibliothèque dont nous avons besoin.
- Deuxième partie Transférer une bibliothèque Ethernet fonctionnelle de la vilaine petite Mario à sa place dans le projet Arduino Mega Server. Il n'y a rien de compliqué ici - copiez-le simplement à l'emplacement de notre bibliothèque qui ne fonctionne pas dans Ethernet IDE 1.6.7.
- Troisième partie. Modification pour le projet Arduino Mega Server d'une bibliothèque portée et évidemment fonctionnelle en Ethernet IDE 1.6.7.
La même chose doit être faite avec toutes les bibliothèques non compilables du projet (c'est-à-dire, trouver une version de travail de la bibliothèque à partir de l'EDI et la transférer à sa place dans le projet et la modifier si nécessaire). Mais dans ce cas, nous avons eu de la chance, toutes les autres bibliothèques ont bien fonctionné (parce que Mario n'a pas réussi à les modifier tranquillement, bien qu'il puisse et qu'il le fera certainement dans les nouvelles versions de l'IDE, mais nous savons déjà comment y faire face).Conclusion
C'est tout le secret de réussir à travailler dans l'IDE Arduino avec des projets complexes. Vous pouvez maintenant vous sentir complètement armé et il ne vous sera pas difficile de faire fonctionner votre projet dans n'importe quelle version de l'IDE Arduino.Source: https://habr.com/ru/post/fr392931/
All Articles