On voit que cette distance est grande et que se passer de compilateur aurait un impact pour le moins significatif sur le travail du programmeur. Comme toujours, c’est une affaire de compromis.Le Linkeur, éditeur de liens dans notre belle langue, est chargé de recoller tous ces morceaux, ces fichiers objets, et de fabriquer un résultat unique à exécuter, ou dans le cas de l’Atmel, à transmettre au micro-contrôleur. Les commentaires ont pour seul but de vous aider à comprendre (ou à vous rappeler) comment votre programme fonctionne ou d'en informer les autres. Une poche pour un Uno, un hangar (et une petite centrale électrique…) pour ces antiques engins pourt… Lorsque vous appuyez sur le bouton « vérifier », l’IDE Arduino lance un programme appelé « compilateur ». Cette surcouche va tenir compte aussi du type d’Arduino qui est demandé : Nano, Uno, Mega ou autre…Il va ajouter l’include de arduino.h mais aussi les déclarations de setup et loop :Le premier ordre pré-processeur (voir plus bas…) #line est seulement là pour donner le nom du fichier tel qu’il est connu pour le créateur. Sa déclaration lui suffit pour compiler, et c’est ce qu’il fait.Le linkeur, lui, tente de recoller les morceaux épars, tous les objets et les librairiesAu final, le résultat est un fichier .hex présent dans le répertoire temporaire. #define COPY(SOURCE, DEST) strncpy(DEST, SOURCE, MAXSTRLEN);#define COPY(SOURCE, DEST) strncpy(DEST, SOURCE, 80);

En cas d’anomalie de compilation, le compilateur renseigne sur le type d’erreur et la ligne où elle se trouve. Pour illustrer ceci considérons la portion de sketch suivant :Nous voyons ici le résultat du travail du compilateur et la traduction de notre fonction On ne va pas aller plus loin, le propos est juste de mesurer la distance qui existe entre le texte que l’on écrit et ce que le micro-contrôleur exécute effectivement. Comme son nom l’indique son rôle est de pré mâcher les sources avant de les envoyer au compilateur proprement dit. Enfin, les classes C++ peuvent devenir de grands, donc à un certain point votre source ne souffrent plus de ce que le processeur peut stocker. Pour le créateur du croquis, la ligne 1 est bien la ligne avec ’void setup()’.Une fois le source rendu compilable, la compilation est lancée sur le croquis modifié, mais aussi sur plusieurs sources du noyau Atmel comme HardwareSerial.cpp, ou de Wiring lui même comme Wiring.c . C’est à ce moment là que vous verrez sortir des erreurs du type "undefined reference to `function()’". Une poche pour un Uno, un hangar (et une petite centrale électrique…) pour ces antiques engins pourtant bien moins puissants que le plus petit de nos micro-contrôleur.En 1972 deux chercheurs des laboratoires Bell, Dennis Rithchie et Ken Thompson ont créé un langage maison baptisé Le binaire des débuts était directement envoyé ou, comme on l’a vu, câblé sur la machine, mais les langages suivants sont des langages compilés. Grâce à Arduino, vous êtes en mesure de communiquer et transférer des données facilement à votre circuit imprimé. Il y a deux façons de créer des lignes de commentaires : Syntaxe Commentaire mono-ligne // Commentaire sur une seule ligne : tout ce qui suit les "//" est ignoré par le compilateur Dans l’ordre, on a eu le Big Bang, les dinosaures, Jésus, Mahomet, la cocotte minute, et le BASIC ! The open-source Arduino Software (IDE) makes it easy to write code and upload it to the board. (Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse. Ce répertoire existera tant que l’IDE restera ouvert sur un croquis donné, et les compilations successives stockeront leurs résultats ici. Sous Windows, ce répertoire est dans temp (dans l’explorateur de fichier tapez %temp% dans la barre d’adresse) et son nom commence par arduino_build…Avant de demander au compilateur GCC de faire son travail, une intervention est faite par la surcouche Arduino qui s’appelle ’Wiring’ pour modifier votre source et le rendre compilable et complet.

En effet, tous les fichiers présents dans votre répertoire de croquis sont édités ensemble dans l’IDE, et aussi compilés ensemble pour obtenir le résultat. Le second #line est là pour imposer au compilateur quoi dire si une erreur se produit. 383 Le résultat de la compilation sera un fichier .o dit fichier objet. The environment is written in Java and based on Processing and other open-source software. Il reçoit en argument la liste des fichiers à assembler, nos objets, mais aussi une liste de librairies (fichiers .lib, .l ou .so) qui contiennent des objets tout faits, comme les fonctions de base Arduino pinMode ou digitalWrite, ou l’objet Serial, ou encore les librairies standard du C. Armé de tout cela, le linkeur va vérifier que toutes les pièces du puzzle de ce qui lui a été demandé sont bien présentes avant de construire le résultat final. Un micro-contrôleur n’est par conséquent capable d’exécuter que des instructions très simples, beaucoup plus simples que les instructions complexes utilisées en C ou C++. Comme il ne se base que sur les sources, le compilateur ne pourrait pas savoir si une telle fonction EnMajuscule existe quelque part dans les objets qui seront réunis à la fin par le linkeur. Si la chaîne ’string’ ne change pas pendant la boucle, le compilateur peut sortir l’appel à strlen dans une variable locale créée pour l’occasion et ainsi accélérer le traitement de la boucle :C’est le compilateur qui voit si ’string’ est modifié ou pas pendant la boucle, mais il peut échouer à voir la modification si elle est loin dans les appels de fonction successifs… D’où la possibilité pour un compilateur de provoquer un bug là où le code semble fonctionner. A noter que très peu des micro-contrôleurs antérieurs à l’Arduino, souvent employés de manière industrielle, et pour beaucoup encore en usage aujourd’hui, étaient programmables via un langage évolué comme le C…Une bonne partie du travail de la compilation est du traitement de fichiers textes et de chaînes de caractères, une autre partie est la production du code machine et son optimisation : enlever le code inutilisé, factoriser ou simplifier lorsque c’est possible…Voyons plus spécifiquement le travail du compilateur C/C++ qui nous occupe : GCC utilisé par l’IDE Arduino. Si je change l’interface de len dans len.c en disant par exemple que je limite la longueur à un byte :A nouveau, la compilation va échouer parce que GCC ne trouvera pas la fonction avec un byte en valeur de retour. Ces ordres sont peu nombreux et commencent tous par dièse (’#’). On pourrait ainsi l’utiliser dans le .ino ou dans les .cpp associés au projet.