{"id":46,"date":"2012-04-14T18:01:49","date_gmt":"2012-04-14T17:01:49","guid":{"rendered":"http:\/\/fabienletort.com\/tech\/?p=46"},"modified":"2012-04-14T18:37:18","modified_gmt":"2012-04-14T17:37:18","slug":"arduino-avr-gcc-et-avrdude","status":"publish","type":"post","link":"https:\/\/tech.fabienletort.com\/?p=46","title":{"rendered":"Arduino, avr-gcc et avrdude"},"content":{"rendered":"<p><a href=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/arduino_logo_gcc.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-84\" title=\"arduino_logo_gcc\" src=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/arduino_logo_gcc.png\" alt=\"\" width=\"200\" height=\"300\" \/><\/a><span style=\"text-decoration: underline;\"><strong>Arduino.<\/strong><\/span><br \/>\nOn ne le pr\u00e9sente\u00a0plus.<br \/>\nC&rsquo;est \u00e0 la fois un package hardware et un package software. Il permet donc aux bidouilleurs de se mettre facilement au monde de l&#8217;embarqu\u00e9, via un langage de\u00a0programmation\u00a0(<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Processing\">processing<\/a>) l\u00e9g\u00e8rement adapt\u00e9.<\/p>\n<p>Oui, mais voil\u00e0, quand vous \u00eates d\u00e9j\u00e0 habitu\u00e9 par ce monde (aussi bien soft que hard), vous \u00eates vite un peu d\u00e9pit\u00e9 par l&rsquo;ide d&rsquo;arduino. Vous avez envie de profiter du c\u00f4t\u00e9 hardware de ce monde (cela reste des cartes d&rsquo;\u00e9valuation, prototypage tr\u00e8s bon march\u00e9)&#8230; Mais cela ne vous\u00a0g\u00e8ne\u00a0pas de garder votre bon vieux C&#8230; De garder votre \u00e9diteur pr\u00e9f\u00e9r\u00e9&#8230; Votre makefile maison qui automisera tout. Bref avoir un\u00a0environnement\u00a0de\u00a0d\u00e9veloppement\u00a0plus\u00a0efficace, plus ouvert (plus technique). Avec aucun bout de soft cach\u00e9.<\/p>\n<p>&nbsp;<\/p>\n<p>Bref, en gros, pour moi\u00a0personnellement\u00a0\u00e7a\u00a0donne, \u00ab\u00a0bref c beau on vient d&rsquo;inventer l&rsquo;arduino en 2005, mais je serais pas contre d&rsquo;utiliser (directement) ce bon vieil <a title=\"Avr-Libc\" href=\"www.nongnu.org\/avr-libc\/\">avr-libc<\/a> avec son compilo et ces lib, tout comme en 2001 avec mon AT90S8515. (souvenir d&rsquo;un bout de code permettant de lire un disque dur&#8230;). Apr\u00e8s tout\u00a0pourquoi\u00a0s&rsquo;enfermer dans le monde arduino ? Le but du prototypage et de pouvoir aussi compiler directement ensuite sur une cible diff\u00e9rente ?<\/p>\n<p>J&rsquo;ai ajout\u00e9 \u00ab\u00a0directement\u00a0\u00bb car au final l&rsquo;IDE arduino s&rsquo;appui sur cette chaine pour la compilation. Elle am\u00e8ne juste une surcouche fine au langage C (<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Processing\">processing<\/a>), \u00a0et des librairies suppl\u00e9mentaires pour des\u00a0acc\u00e8s\u00a0plus facile \u00e0 certains p\u00e9riph\u00e9riques (uart, spi) voir composant (shields) ext\u00e9rieurs (ex: ethernet).<\/p>\n<h2>First Step : Compilation<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" title=\"Javier Valcarce's Personal Website &gt; Program Arduino with AVR-GCC\" src=\"http:\/\/easycaptures.com\/fs\/uploaded\/504\/thumbs\/3307529900_m.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><a title=\"Program_Arduino_with_AVR-GCC\" href=\"http:\/\/www.javiervalcarce.eu\/wiki\/Program_Arduino_with_AVR-GCC\" target=\"_blank\">Ce premier article trouv\u00e9 sur le net<\/a>, partant du m\u00eame constat, aborde ce sujet, avec les premiers arduino en cible (atmega8\/168).<br \/>\nIl cible avant tout le monde linux et m&rsquo;a permis de re-trouver <a title=\"avr-libc a simple project\" href=\"http:\/\/www.nongnu.org\/avr-libc\/user-manual\/group__demo__project.html\">LA bonne page d&rsquo;aide<\/a> de l&rsquo;avr-libc expliquant les \u00e9tapes pour compiler un programme (qui reste apr\u00e8s tout les \u00e9tapes usuelles et classiques d&rsquo;une compilation, bref un tuto qui s&rsquo;adresse plus \u00e0 ceux qui d\u00e9couvre ce processus).<\/p>\n<p>Ici, on peut donc voir comment g\u00e9n\u00e9rer \u00e7a \u00e0 la mano, et le makefile n\u00e9cessaire pour automatiser tout \u00e7a.<\/p>\n<p>Il faut savoir que l&rsquo;avr-libc est disponible sous Windows via le package <a title=\"WinAvr Homepage\" href=\"winavr.sourceforge.net\/\" target=\"_blank\">WinAvr<\/a>. Ce dernier est d&rsquo;ailleurs inclus dans <a title=\"Arduino Package for Windows\" href=\"http:\/\/arduino.googlecode.com\/files\/arduino-1.0-windows.zip\" target=\"_blank\">le package arduino<\/a> (et d&rsquo;ailleurs semble plus \u00e0 jour que le package officiel). \u00a0Dans la suite de ce tuto, on va donc faire avec tout ce qui provient du package arduino (ici dans sa version 1.0), install\u00e9 sous <em>D:\\arduino-1.0<\/em>. \u00a0Bref on retrouve donc le package winavr (updat\u00e9) sous D<em>:\\arduino-1.0\\hardware\\tools\\avr<\/em>. Et donc tous les compilos et autre sont dans le sous-r\u00e9pertoire <em>bin<\/em>. (structure linux classique\u00a0ici).<\/p>\n<p>On va garder\u00a0l\u2019exemple\u00a0fourni par notre tuto qui est l&rsquo;\u00e9quivalent d&rsquo;un des\u00a0exemples\u00a0de base d&rsquo;Arduino, <a title=\"Arduino &gt; Tutorial &gt; Blink\" href=\"http:\/\/arduino.cc\/en\/Tutorial\/Blink\" target=\"_blank\">le\u00a0clignotement\u00a0d&rsquo;une Led<\/a>.<br \/>\nVoici donc le fichier blink.c :<\/p>\n<pre>#include <avr\/io.h>\r\n#include <util\/delay.h>\r\n\r\nint main (void)\r\n{\r\n  unsigned char counter;\r\n  \/* set PORTB for output*\/\r\n  DDRB = 0xFF;\r\n\r\n  while (1)\r\n  {\r\n      \/* set PORTB.2 high *\/\r\n      PORTB = 0xFF;\r\n\r\n      \/* wait (10 * 120000) cycles = wait 1200000 cycles *\/\r\n      counter = 0;\r\n      while (counter != 50)\r\n      {\r\n\t  \/* wait (30000 x 4) cycles = wait 120000 cycles *\/\r\n\t  _delay_loop_2(30000);\r\n\t  counter++;\r\n      }\r\n\r\n      \/* set PORTB.2 low *\/\r\n      PORTB = 0x00;\r\n\r\n      \/* wait (10 * 120000) cycles = wait 1200000 cycles *\/\r\n      counter = 0;\r\n      while (counter != 50)\r\n      {\r\n\t  \/* wait (30000 x 4) cycles = wait 120000 cycles *\/\r\n\t  _delay_loop_2(30000);\r\n\t  counter++;\r\n      }\r\n  }\r\n  return 1;\r\n}<\/pre>\n<p>Et donc les commandes \u00e0 la mano de compilation provenant de la page de win-avr :<\/p>\n<pre>D:\\arduino-1.0\\hardware\\tools\\avr\\bin\\avr-gcc -g -Os -mmcu=atmega2560 -c blink.c<\/pre>\n<pre>D:\\arduino-1.0\\hardware\\tools\\avr\\bin\\avr-gcc -g -mmcu=atmega2560 -o blink.elf blink.o<\/pre>\n<pre>D:\\arduino-1.0\\hardware\\tools\\avr\\bin\\avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex<\/pre>\n<p>Pour automaiser tout \u00e7a, voici une version un peu plus clean du makefile que celui propos\u00e9 par le tuto d&rsquo;avr-libc. C&rsquo;est le genre de makefile g\u00e9n\u00e9rique que j&rsquo;utilise. Bien qui celui-ci soit modifi\u00e9 (simplifi\u00e9) pour l&rsquo;occasion (en effet habitullement, j&rsquo;ai un sous-r\u00e9pertoire diff\u00e9rent pour tout ce qui est source, header et .o). Avec ce genre de makefile, on peut avoir un makefile global simple (qui d\u00e9finie les variables utilisateurs, conceptuelles) qui inclus ce dernier plus g\u00e9n\u00e9rique. De plus j&rsquo;ai jout\u00e9 une variable <em>TOOLSDIR<\/em> pour nous \u00e9viter de modifier le PATH pour le moment.<\/p>\n<pre># GENERIC MAKEFILE EXAMPLE FOR AVR GCC\r\n\r\n# ================ Project name\r\nPROJECT_NAME=blink\r\n\r\n# ================ Working directory\r\nWORKDIR=.\r\nTOOLSDIR=D:\\Projets\\Hardware\\Arduino\\IDE\\arduino-1.0\\hardware\\tools\\avr\\bin\\\\\r\n\r\n# ================ Compilation Tools\r\nCOMMAND_PREFIX=avr-\r\nMCU_TARGET=atmega2560\r\n\r\nCC=$(TOOLSDIR)$(COMMAND_PREFIX)gcc\r\nOBJCOPY=$(TOOLSDIR)$(COMMAND_PREFIX)objcopy\r\nOBJDUMP=$(TOOLSDIR)$(COMMAND_PREFIX)objdump\r\n\r\n# ================ Common compilation flags\r\nDEBUG=-g -Wall\r\nOPTIM=-O2\r\nDEFS=\r\n\r\nCFLAGS+=$(DEBUG) \\\r\n\t\t$(OPTIM) \\\r\n\t\t-mmcu=$(MCU_TARGET) \\\r\n\t\t$(DEFS)\r\n\r\n# ================ Libs &amp; link FIle\r\nLIBS=\r\nLINKER_FLAGS=\r\n\r\n# Default sources are all sources of sources directory\r\nSOURCES = $(wildcard $(WORKDIR)\/*.c)\r\nOBJECTS = $(SOURCES:.c=.o)\r\n\r\n# ================ Main targets\r\n\r\nall: $(PROJECT_NAME).elf lst text\r\n\r\n$(PROJECT_NAME).elf: $(OBJECTS)\r\n\t\t$(CC) $(CFLAGS) -o $@ $(OBJECTS) $(LIBS) $(LINKER_FLAGS)\r\n\r\n$(OBJECTS): $(WORKDIR)\/%.o : $(WORKDIR)\/%.c\r\n\t\t@echo BUILDING $@\r\n\t\t$(CC) -c $(CFLAGS) $&lt; -o $@\t\r\n\r\nclean:\r\n\t\trm -rf *.o $(PROJECT_NAME).elf\r\n\t\trm -rf *.lst *.map\r\n\r\nlst:  $(PROJECT_NAME).lst\r\n\r\n%.lst: %.elf\r\n\t\t$(OBJDUMP) -h -S $&lt; &gt; $@\r\n\r\n# Rules for building the .text rom images\r\n\r\ntext: hex\r\n\r\nhex:$(PROJECT_NAME).hex\r\n\r\n%.hex: %.elf\r\n\t\t$(OBJCOPY) -j .text -j .data -O ihex $&lt; $@<\/pre>\n<h2>Second Step : Upload<\/h2>\n<p>Alors l\u00e0, on va devoir s&rsquo;\u00e9carte de notre principal premi\u00e8re source d&rsquo;information.<br \/>\nOn a donc bien deux fa\u00e7on de charger notre programme dans l&rsquo;arduino:<\/p>\n<ul>\n<li>En gardant le bootloader \u00ab\u00a0arduino\u00a0\u00bb originale<\/li>\n<li>Sans le bootloader, avec un programmeteur \u00ab\u00a0classique\u00a0\u00bb<\/li>\n<\/ul>\n<p>Pour ce deuxi\u00e8me cas, on va passer le coup du port\u00a0parall\u00e8le\u00a0cit\u00e9 dans notre premier tuto :-) Le monde \u00e9volue&#8230;. Et on va tout simplement passer ce second cas. En effet, dans ce cas il faut utiliser le connecteur officiel de programmation ICSP pr\u00e9sent sur l&rsquo;arduino. Il vous faut aussi un programmateur compatible, et donc la proc\u00e9dure \u00e0 suivre sera diff\u00e9rente selon ce dernier.<\/p>\n<p>Ici, on va se focaliser \u00e0 rester un peu dans le monde arduino, en profitant de ce bootloader, qui apporte quand m\u00eame une fonctionali\u00e9 int\u00e9ressante en mode proto\/test. De plus personellement, j&rsquo;ai bien un programmateur isp qui traine (depuis 2001&#8230;) mais je n&rsquo;ai plus de foutu port parall\u00e9le sur mon pc&#8230; Et donc tant que je ne ma passe pas du bootloader (ou tant que je le modifie pas), je n&rsquo;en ai pas r\u00e9ellement besoin.<\/p>\n<p>Donc en gros \u00ab\u00a0Comment qu&rsquo;on fait pour downloader de la m\u00eame mani\u00e8re que l&rsquo;Arduino IDE en ligne de commande ?\u00a0\u00bb<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" title=\"False and misleading information &gt; avrdude 5.10, arduino mega 2560, command line uploading\" src=\"http:\/\/easycaptures.com\/fs\/uploaded\/504\/thumbs\/8835583854_m.jpg\" alt=\"\" width=\"160\" height=\"160\" \/>Et c&rsquo;est l\u00e0 que <a title=\"avrdude 5.10, arduino mega 2560, command line uploading\" href=\"http:\/\/false.ekta.is\/2011\/05\/avrdude-5-10-arduino-mega-2560-command-line-uploading\/\" target=\"_blank\">ma 2\u00e8me grosse source d&rsquo;inspiration arrive<\/a>. En effet, mon arduino mega 2560 n&rsquo;a plus le FTDI au niveau de son usb&#8230; je suis donc bien loin de notre premier tuto utilis\u00e9 pour la compilation. C&rsquo;est donc un atmega8u2 \u00e0 la place. Ce dernier est donc une sorte de passerelle entre l&rsquo;usb et le mode de programmation offert par le bootloader. Il est pilot\u00e9 suivant le protocol officiel stk500. (comme certains autres programmateur du commerce, qui sont alors un bridge entre le stk500 et le port de programmation isp de l&rsquo;atmel).<br \/>\nOk, oui vous avez compris, avec l&rsquo;arduino pas besoin de\u00a0programmateur, car en gros, ce dernier est d\u00e9j\u00e0 dessus&#8230;. \u00a0(ca reste vraiment une carte de prototypage). Enfin, en passant par ce dernier, on sait donc qu&rsquo;on ne met pas en p\u00e9ril la zone d\u00e9di\u00e9 au bootloader.<\/p>\n<p>Au final, j&rsquo;ai eu pas mal de probl\u00e8me, croyant que sa solution ne marchait pas, tout \u00e7a pour refaire exactement la m\u00eame d\u00e9marche que lui ! Cela m&rsquo;aura au moins permis de savoir o\u00f9 trouver les traces d&rsquo;ex\u00e9cution de l&rsquo;IDE d&rsquo;arduino. Et au final, la bonne solution est en commentaire de notre 2\u00e8me tuto.<\/p>\n<p>J&rsquo;ai donc d&rsquo;abord lanc\u00e9 une compilation\/upload depuis l&rsquo;IDE officiel, en activant les traces d&rsquo;upload afin de voir la ligne de commande.<\/p>\n<p>Pour info voil\u00e0 comment activer les traces :<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/ArduinoIDE-Preference1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54 alignnone\" title=\"ArduinoIDE-Preference\" src=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/ArduinoIDE-Preference1.png\" alt=\"\" width=\"300\" height=\"360\" \/><\/a>\u00a0 \u00a0\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-52 alignnone\" style=\"line-height: 24px;\" title=\"ArduinoIDE-Preference-Window\" src=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/ArduinoIDE-Preference-Window.png\" alt=\"\" width=\"311\" height=\"281\" \/><\/p>\n<p>C&rsquo;est \u00e9galement possible de le faire directement depuis le fichier de preferences ( <a style=\"font-style: italic; line-height: 24px;\" href=\"http:\/\/arduino.cc\/forum\/index.php?topic=95254.0\">http:\/\/arduino.cc\/forum\/index.php?topic=95254.0<\/a>).Il est dans ce cas pr\u00e9f\u00e9rable de modifier le fichier sp\u00e9cifique \u00e0 l&rsquo;utilisateur (sous windows C:\\Documents and Settings\\&lt;USER&gt;\\Application Data\\Arduino) \u00a0et pas celui du r\u00e9pertoire arduino (arduino-1.0\\lib).<br \/>\nUne vue sur ce fichier (utilisateur) permet de voir, toutes les options r\u00e9ellement disponibles. 2 options vont d&rsquo;ailleurs me mettre la puce \u00e0\u00a0l\u2019oreil\u00a0pour la suite: console.error.file=stderr.txt &amp;\u00a0console.output.file=stdout.txt.<\/p>\n<p>En effet, une fois les traces activ\u00e9es, on n&rsquo;a pas le temps de voir la ligne de commande trac\u00e9e pour l&rsquo;upload, d&rsquo;autres traces suivent, et la fen\u00eatre trace de l&rsquo;IDE d&rsquo;arduino n&rsquo;offre pas un historique assez important (tu vois bien qu&rsquo;il faut se d\u00e9faire de cet IDE !). On se dit, il doit bien avoir un fichier&#8230; en plus certaines options ont l&rsquo;air de le pr\u00e9ciser !<\/p>\n<p><em>Apr\u00e8s o\u00f9 sont-ils ?<\/em><em> =&gt; <\/em><a style=\"line-height: 24px;\" href=\"http:\/\/forums.adafruit.com\/viewtopic.php?f=25&amp;t=23271#p121783\">http:\/\/forums.adafruit.com\/viewtopic.php?f=25&amp;t=23271#p121783<\/a>.<br \/>\nOk , ils sont donc ici :\u00a0<em>C:\\Documents and Settings\\&lt;USER&gt;\\Local Settings\\Temp\\console*******.tmp<\/em><br \/>\nSuffit de trouver le dernier r\u00e9pertoire g\u00e9n\u00e9r\u00e9 et vous aurez\u00a0acc\u00e8s\u00a0aux 2 fichier de traces de toute une session de l&rsquo;IDE.<\/p>\n<p>On a donc dans le stdout.txt:<\/p>\n<pre>Binary sketch size: 1602 bytes (of a 258048 byte maximum)\r\nD:\\arduino-1.0\\hardware\/tools\/avr\/bin\/avrdude -CD:\\arduino-1.0\\hardware\/tools\/avr\/etc\/avrdude.conf -v -v -v -v -patmega2560 -cstk500v2 -P\\\\.\\COM3 -b115200 -D -Uflash:w:C:\\DOCUME~1\\Fabien\\LOCALS~1\\Temp\\build8342149431938943132.tmp\\Blink.cpp.hex:i<\/pre>\n<p>Et dans le stderr.txt, les traces qui suivent :<\/p>\n<pre>avrdude: Version 5.11, compiled on Sep \u00a02 2011 at 19:38:36\r\nCopyright (c) 2000-2005 Brian Dean, http:\/\/www.bdmicro.com\/\r\nCopyright (c) 2007-2009 Joerg Wunsch\r\nSystem wide configuration file is \"D:\\arduino-1.0\\hardware\/tools\/avr\/etc\/avrdude.conf\"\r\nUsing Port \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0: \\\\.\\COM3\r\nUsing Programmer \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0: stk500v2\r\nOverriding Baud Rate \u00a0 \u00a0 \u00a0 \u00a0 \u00a0: 115200\r\navrdude: Send: . [1b] . [01] . [00] . [01] . [0e] . [01] . [14]\r\navrdude: Recv: . [1b]\r\n......<\/pre>\n<p>En\u00a0retentant\u00a0\u00e0 la main, la ligne de commande d\u00e9tect\u00e9e, on a les m\u00eame traces mais un foireux Timeout \u00e0 la place du premier Recv !!!<br \/>\nAu passage contrairement au tuto, on voit bien que la diff\u00e9rence ne vient pas d&rsquo;avrdude, c&rsquo;est la version 5.11 qui est maintenant livr\u00e9 avec la package Arduino. Ce n&rsquo;est donc plus une version sp\u00e9cifique Arduino.<\/p>\n<p>En continuant de survoler le tuto et ces commentaires, voici les tentatives suivantes :<\/p>\n<ul>\n<li>Essai en sp\u00e9cifiant un programmer de type \u00ab\u00a0arduino\u00a0\u00bb =&gt; m\u00eame constat<\/li>\n<li>Essai en pla\u00e7ant en reset la board (via le bouton) jusqu&rsquo;au moment o\u00f9 on lance la ligne de commande : Eureka ! En effet c&rsquo;est ok. Par contre, c&rsquo;est pas super top automatique ton truc ?<\/li>\n<li>Heureusement qu&rsquo;un commentaire du tuto nous r\u00e9sout tout \u00e7a. Il faut utiliser un programmateur de type wiring. C&rsquo;est\u00a0totalement\u00a0accept\u00e9 par l&rsquo;avrdude 5.11 livr\u00e9 par le package arduino.<\/li>\n<\/ul>\n<p>C&rsquo;est quand m\u00eame \u00e9trange qu&rsquo;on soit oblig\u00e9 de changer le type de programmateur par rapport \u00e0 la ligne de commande faite par l&rsquo;IDE arduino&#8230; C&rsquo;est comme ci l&rsquo;IDE arduino faisait un reset cach\u00e9 de la board avant de lancer avrdude.<\/p>\n<p>AU final :<\/p>\n<pre>D:\\arduino-1.0\\hardware\/tools\/avr\/bin\/avrdude -CD:\\arduino-1.0\\hardware\/tools\/avr\/etc\/avrdude.conf -v -v -v -v -patmega2560 -cwiring -P\\\\.\\COM3 -b115200 -D -Uflash:w:D:\\Example\\Blink.hex:i<\/pre>\n<p>On pourra bien entendu enlenver tous les \u00ab\u00a0-v\u00a0\u00bb qui sont i\u00e7i pour \u00eatre en mode trace (full). Enfin pourquoi pas ajouter une option dans le makefile pour ajouter \u00e7a (bien que cette ligne de commande pourra devrait normalement pouvoir \u00e9galement \u00eatre associ\u00e9 directement \u00e0 un bouton dans votre IDE).<\/p>\n<p>Dans le makefile on pourrait ajouter :<\/p>\n<pre>download : $(PROJECT_NAME).hex\r\n\t\t$(TOOLSDIR)avrdude -CD:\\arduino-1.0\\hardware\/tools\/avr\/etc\/avrdude.conf -patmega2560 -cwiring -P\\\\.\\COM3 -b115200 -D -Uflash:w:$(PROJECT_NAME).hex:i<\/pre>\n<p>Ce qui nous donne dans la console DOS :<\/p>\n<pre>D:\\Example>D:\\arduino-1.0\\hardware\\tools\\avr\\utils\\bin\\make.exe download\r\nD:\\arduino-1.0\\hardware\\tools\\avr\\bin\\\\avrdude -CD:\\arduino-1.0\\hardware\\tools\\avr\\etc\\avrdude.conf -p\r\natmega2560 -cwiring -P\\\\.\\COM3 -b115200 -D -Uflash:w:blink.hex:i\r\n\r\navrdude: AVR device initialized and ready to accept instructions\r\n\r\nReading | ################################################## | 100% 0.02s\r\n\r\navrdude: Device signature = 0x1e9801\r\navrdude: reading input file \"blink.hex\"\r\navrdude: writing flash (348 bytes):\r\n\r\nWriting | ################################################## | 100% 0.06s\r\n\r\navrdude: 348 bytes of flash written\r\navrdude: verifying flash memory against blink.hex:\r\navrdude: load data flash data from input file blink.hex:\r\navrdude: input file blink.hex contains 348 bytes\r\navrdude: reading on-chip flash data:\r\n\r\nReading | ################################################## | 100% 0.05s\r\n\r\navrdude: verifying ...\r\navrdude: 348 bytes of flash verified\r\n\r\navrdude: safemode: Fuses OK\r\n\r\navrdude done.  Thank you.\r\n\r\nD:\\Example><\/pre>\n<h2>Se passer de l&rsquo;install de l&rsquo;IDE officiel ?<\/h2>\n<p>On a bien vue que pour le moment, j&rsquo;ai tout fait via les packages install\u00e9s avec l&rsquo;IDE d&rsquo;arduino. J&rsquo;ai parl\u00e9 aussi de l\u00e9g\u00e8re diff\u00e9rence (mise \u00e0 jour) par rapport \u00e0 l&rsquo;installer simple de WinAvr. Regardons ce qu&rsquo;il en est r\u00e9ellement.<\/p>\n<p>Le dernier package officiel de WinAvr date de <a title=\"DOwnload WinAvr\" href=\"http:\/\/sourceforge.net\/projects\/winavr\/files\/\" target=\"_blank\">Janvier 2010<\/a>. C&rsquo;est pas top comme impression pour le moment. Par default, il install donc tout sous\u00a0<em>C:\\WinAVR-20100110<\/em>.\u00a0Personnellement, je n&rsquo;ai pas demander \u00e0 l&rsquo;installer de ma changer le PATH. On verra \u00e7a ensuite.<\/p>\n<p>On va donc retrouver le m\u00eame genre de contenu sous\u00a0<em>C:\\WinAVR-20100110 <\/em>que sous\u00a0<em>D:\\arduino-1.0\\hardware\\tools\\avr<\/em>.<br \/>\nD&rsquo;ailleurs dans les 2 est pr\u00e9sent le fichier qui permet de d\u00e9sinstaller WinAvr. On voit bien que le package arduino contient bien un gros copier\/coller de l&rsquo;install faire par WinAvr. Il aurait au moins pu enlever cet ex\u00e9cutable sp\u00e9cifique \u00e0 la\u00a0d\u00e9sinstallation\u00a0de WinAvr ! \u00a0On peut noter que d&rsquo;un c\u00f4t\u00e9 on a\u00a0WinAVR-20100110-uninstall.exe et chez arduino\u00a0WinAVR-20081205-uninstall.exe. Cette version 20081205 est \u00e9galement pr\u00e9cis\u00e9 dans le\u00a0WinAVR-user-manual.txt.<\/p>\n<p>Ok donc arduino est bas\u00e9 sur la release 20081205 de WinAvr. Cela \u00e0 l&rsquo;air d&rsquo;un pauvre copier coller (en\u00a0gardant\u00a0le\u00a0d\u00e9sinstaller\u00a0!) Mais on a bien vu qu&rsquo;il contenait un avrdude tout neuf, le 5.11 qui est sortie <a title=\"AVRDUDE 5.11 released\" href=\"http:\/\/savannah.nongnu.org\/forum\/forum.php?forum_id=6916\" target=\"_blank\">le 27 Aout 2011<\/a> !!! Le r\u00e9pertoire livr\u00e9 par Arduino a donc bien \u00e9tait modifi\u00e9.<\/p>\n<p>Pour une meilleur comparaison, on pourrait m\u00eame ce baser sur cette release de WinAvr, elle est toujours dispo (merci google) :\u00a0<a href=\"http:\/\/en.sourceforge.jp\/projects\/sfnet_winavr\/downloads\/WinAVR\/20081205\/WinAVR-20081205-install.exe\/\">http:\/\/en.sourceforge.jp\/projects\/sfnet_winavr\/downloads\/WinAVR\/20081205\/WinAVR-20081205-install.exe\/<\/a><\/p>\n<p>Me voil\u00e0 donc avec un 3\u00e8me winavr (toujours pas de PATH modifi\u00e9, on commence \u00e0 comprendre pourquoi) sous <em>C:\\WinAVR-20081205<\/em>.<\/p>\n<p>4111 fichier compar\u00e9s plus tard (entre WinAVR-20081205 et sa version Arduino) on arrive \u00e0 tr\u00e8s peu de diff\u00e9rence :\u00a0<a href=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/rapport.html\">WinAVR-20081205 vs arduino-1.0<\/a><\/p>\n<p>Les 3 principales :<\/p>\n<ul>\n<li>avrdude.exe -&gt; Qui l&rsquo;aurait cru !<\/li>\n<li><a href=\"http:\/\/fabienletort.com\/tech\/wp-content\/uploads\/2012\/04\/eeprom.h.html\">eeprom.h<\/a>\u00a0(pourtant aucune diff\u00e9rence dans le copyright ; \u00a0les 3 diff\u00e9rences sont bien annot\u00e9es et semble concerner le 2560)<\/li>\n<li>Enfin, avrdude.conf qui change aussi d&#8217;emplacement.\u00a0Originalement\u00a0dans bin il passe dans etc. Vous savez c&rsquo;est celui qu&rsquo;on passe en ligne de commande \u00e0 avrdude plus haut. Les diff\u00e9rences doivent venir de la diff\u00e9rence de version d&rsquo;avrdude.<\/li>\n<\/ul>\n<p>Tout le reste, c&rsquo;est du fichier en plus du c\u00f4t\u00e9 arduino. \u00a0C&rsquo;est le contenu de tout le r\u00e9pertoire pn au final. Des fichiers xml, scheme et clips&#8230; Je sais pas trop \u00e0 qui \u00e0 quoi \u00e7a sert&#8230;. Surement pas \u00e0 winavr en tout cas.<\/p>\n<p>Ce qu&rsquo;on peut constater :<\/p>\n<p>C&rsquo;est que d\u00e9j\u00e0, winavr n&rsquo;est plus mise \u00e0 jour depuis 2010, mais en plus le outils utilis\u00e9s par le package arduino sont ceux de winavr version 2008 ! On faisant une comparaison de winavr 2008 vs 2010 on voit bien que tout a \u00e9volu\u00e9, tous les fichiers sont diff\u00e9rents. EN regardant le manuel, on sait qu&rsquo;on est pass\u00e9 de gcc 4.3.2 \u00e0 4.3.3, d&rsquo;avr-libc 1.6.4 \u00e0 1.6.7, d&rsquo;avrdude 5.5 au 5.8, d&rsquo;avarice 2.7 au 2.9 de simulAVR 0.1.2.5 au 0.9&#8230; Il y a \u00e9galement d&rsquo;autres petits outiles en plus&#8230;. A la fin il \u00e9tait donc pr\u00e9cisait que c&rsquo;\u00e9tait la derni\u00e8re version de win-avr bien et que bien entendu tous les projets\u00a0englob\u00e9s\u00a0continu\u00e9 \u00e0 vivre (la version 2010 est donc elle aussi en retard&#8230;.).<\/p>\n<p>On peut donc se dire que c&rsquo;est dommage que la team arduino n&rsquo;en est pas profit\u00e9 pour faire un gros update de ce package. Bien entendu, le probl\u00e8me ne doit pas se poser dans le monde linux.. vu que ce sont des outils d\u00e9velopp\u00e9s pour ce monde. Il nous manque juste une mise \u00e0 \u00a0jour de leur compilation dans l&rsquo;environnement Windows. (via MinGw ou Cygwin).<\/p>\n<p>AU sujet de la diff\u00e9rence du fichier eeprom.h, on peut juste voir que dans la version d&rsquo;avr-libc 1.6.7 (fourni par le dernier winavr), il a bien \u00e9volu\u00e9. Je pense donc que le patch arduino sp\u00e9cifique au 2560 n&rsquo;est plus n\u00e9cessaire.<\/p>\n<p>Au passage, en prenant la derni\u00e8re version d&rsquo;avrdude, qui est la <a title=\"Download avrdude 5.11.1 (source)\" href=\"http:\/\/download.savannah.gnu.org\/releases\/avrdude\/avrdude-5.11.1.tar.gz\" target=\"_blank\">5.11.1<\/a>, on se rend compte qu&rsquo;on retrouve bien l&rsquo;avrdude.conf fourni par le package arduino. PAr contre c&rsquo;est un package source&#8230; \u00a0Le 5.11 avait un probl\u00e8me avec les FTDI pour la\u00a0programmation. \u00a0Bien entendu on peut soit tenter de compiler ca en environnement windows, soit compter sur la magie du web : google -&gt; <a title=\"AVR GCC forum - AVRdude with TPI devices\" href=\"http:\/\/www.avrfreaks.net\/index.php?name=PNphpBB2&amp;file=printview&amp;t=112243&amp;start=20\" target=\"_blank\">avrfreaks <\/a>-&gt; <a title=\"Avrdude 5.11.1 compil\u00e9 pour windows\" href=\"http:\/\/helix.air.net.au\/helix\/index.php\/avrdude-and-ftdi-232h\/\" target=\"_blank\">helix.air.net.au :: AVRDUDE<\/a>\u00a0(par contre personellement j&rsquo;ai des probl\u00e8mes \u00e0\u00a0l\u2019ex\u00e9cuter&#8230;. la version fourni par le package arduino me\u00a0suffisant\u00a0(pas de programateur avec un ftdi) , je vais pas chercher plus loin)<\/p>\n<p>==&gt; C&rsquo;est bon on a gagn\u00e9.<\/p>\n<p>On se rend donc bien compte que chaque package a \u00e9volu\u00e9 depuis winavr 2010. Par exemple, en allant sur le site avr-libc on voit qu&rsquo;on est en 1.8. Pour \u00eatre \u00e0 jour facilement, le plus simple est encore de travailler (ou du moins compiler) depuis linux. Si vous voulez pas quitter windows, une machine virtuelle est le tour est jou\u00e9. J&rsquo;ai pour ma part un linux tr\u00e8s light (ubuntu-mini sans graphique, juste une console, pour des probl\u00e8mes de pc un peu vieux) . Bref, en y installant tous les outils n\u00e9cessaire, pas de probl\u00e8me.<\/p>\n<pre>$ apt-get install gcc-avr avr-libc avrdude<\/pre>\n<p>J&rsquo;ai tent\u00e9 \u00e7a dans ma machine virtuelle (ubuntu-mini), cela m&rsquo;installe une libc plus r\u00e9cente (1.7.1-2), gcc-avr beaucoup plus r\u00e9cent (4.5.3-2), les binutils-avr en 2.20.1-2, et par contre un avrdude en 5.10-3. Ce dernier point est dommage, il me semble que seul le 5.11 marche dans notre cas. (m&rsquo;enfin ca reste une marchine virtuelle, je peu softer depuis windows aussi).<\/p>\n<p><strong>Pour faire simple sous windows, soit on peut faire confiance \u00e0 mon tuto en se basant sur les outils d\u00e9livr\u00e9s par la package arduino, soit on se met un peu plus \u00e0 jour en utilisant les outils d\u00e9livr\u00e9 par WinAvr-20100110, auquel on lui met la derni\u00e8re version d&rsquo;avrdude (l&rsquo;exe et le .conf) d\u00e9livr\u00e9 par le package arduino.<\/strong><\/p>\n<h3>Utiliser WinAvr uniquement<\/h3>\n<p>J&rsquo;ai fait le test sur mon makefile, j&rsquo;ai chang\u00e9 la ligne <\/p>\n<pre>TOOLSDIR=D:\\Projets\\Hardware\\Arduino\\IDE\\arduino-1.0\\hardware\\tools\\avr\\bin\\\\<\/pre>\n<p>en<\/p>\n<pre>TOOLSDIR=C:\\WinAVR-20100110\\bin\\\\<\/pre>\n<p>La compilation a r\u00e9ussi. Le binaire passe de 995 octets \u00e0 946 octets.<\/p>\n<p>Ensuite, le download (via le makefile) :<\/p>\n<pre>\r\nD:\\Example>C:\\WinAVR-20100110\\utils\\bin\\make.exe download\r\nC:\\WinAVR-20100110\\bin\\\\avrdude -CD:\\Projets\\Hardware\\Arduino\\IDE\\arduino-1.0\\hardware\\tools\\avr\\etc\\avrdude.conf -patmega2560 -cwiring -P\\\\.\\COM3 -b115200 -D -Uflash:w:blink.hex:i\r\nerror at D:\\Projets\\Hardware\\Arduino\\IDE\\arduino-1.0\\hardware\\tools\\avr\\etc\\avrd\r\nude.conf:332 unrecognized character: \"w\"\r\nmake: *** [download] Error 1\r\n<\/pre>\n<p>On s&rsquo;y attendait&#8230;<br \/>\nOn va donc copier l&rsquo;avrdude.exe d&rsquo;Arduino dans C:\\WinAVR-20100110\\bin, pareil pour le avrdude.conf (dans le r\u00e9pertoire arduino-1.0\\hardware\\tools\\avr\\etc et on le met dans C:\\WinAVR-20100110\\bin). Au passage, on peut modifier la ligne de commande de download. Plus besoin de pr\u00e9ciser o\u00f9 se trouve le .conf, car il est dans le m\u00eame r\u00e9pertoire. On re-lance. <strong>C&rsquo;est OK !<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Arduino. On ne le pr\u00e9sente\u00a0plus. C&rsquo;est \u00e0 la fois un package hardware et un package software. Il permet donc aux bidouilleurs de se mettre facilement au monde de l&#8217;embarqu\u00e9, via un langage de\u00a0programmation\u00a0(processing) l\u00e9g\u00e8rement adapt\u00e9. Oui, mais voil\u00e0, quand vous \u00eates d\u00e9j\u00e0 habitu\u00e9 par ce monde (aussi bien soft que hard), vous \u00eates vite un [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[4,6,5,7,8,9],"class_list":["post-46","post","type-post","status-publish","format-standard","hentry","category-embedded","tag-arduino","tag-avr","tag-avr-gcc","tag-avrdude","tag-ide","tag-makefile"],"_links":{"self":[{"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=\/wp\/v2\/posts\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46"}],"version-history":[{"count":30,"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions"}],"predecessor-version":[{"id":102,"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions\/102"}],"wp:attachment":[{"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tech.fabienletort.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}