Attention, la procédure et le pdf ont été corrigé à minuit 10 minutes car il manquait la ligne suivante:
• Dans Studio, ajouter "#include <WProgram.h>" au-dessus de void setup()
Veuillez vérifier que vous avez cette ligne.
Attention, la procédure et le pdf ont été corrigé à minuit 10 minutes car il manquait la ligne suivante:
• Dans Studio, ajouter "#include <WProgram.h>" au-dessus de void setup()
Veuillez vérifier que vous avez cette ligne.
An English summary is available at this address:
http://arduino.cc/forum/index.php/topic,82577.0.html
J'ai essayé de compiler l'exemple de la librairie OneWire :
http://www.pjrc.com/teensy/td_libs_OneWire.html
J'ai appelé ce programme "Thermostat"
La compilation et l'upload se font normalement dans l'ide Arduino.
Par contre, en suivant la procédure que j'ai décrite pour Studio, le building du projet donne des erreurs:
------ Rebuild All started: Project: Thermostat, Configuration: Debug AVR ------
Build started.
Project "Thermostat.avrgccproj" (ReBuild target(s)):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreRebuild" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Thermostat.avrgccproj" (target "ReBuild" depends on it):
Using "RunAvrGCC" task from assembly "C:\Program Files\Atmel\AVR Studio 5.0\Vs\AvrGCCLib.dll".
Task "RunAvrGCC"
C:\Program Files\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe -C "C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug" -f "Makefile" clean all
make: Entering directoryC:/Documents and Settings/Jeannot/Mes documents/AVRStudio/Thermostat/Thermostat/Debug' rm -rf Thermostat.o Thermostat.d libThermostat.a Thermostat.hex Thermostat.eep Thermostat.lss Thermostat.map Thermostat.cpp Invoking: AVR/GNU CPP Compiler "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-g++.exe" -funsigned-char -funsigned-bitfields -I"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino" -I"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libraries\LiquidCrystal" -I"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libraries\OneWire" -O0 -fpack-struct -fshort-enums -g2 -Wall -c -mmcu=atmega328p -MD -MP -MF"Thermostat.d" -MT"Thermostat.d" -o"Thermostat.o" ".././Thermostat.cpp" Finished building: .././Thermostat.cpp Building target: Thermostat.elf Invoking: AVR/GNU C/C++ Linker "C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-g++.exe" -mmcu=atmega328p -Wl,-Map=Thermostat.map -o Thermostat.elf Thermostat.o -Wl,-lcore -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino" Thermostat.o: In function
loop':
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(35,1): undefined reference toOneWire::search(unsigned char*)' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(39,1): undefined reference to
OneWire::reset_search()'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(51,1): undefined reference toOneWire::crc8(unsigned char*, unsigned char)' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(78,1): undefined reference to
OneWire::reset()'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(79,1): undefined reference toOneWire::select(unsigned char*)' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(80,1): undefined reference to
OneWire::write(unsigned char, unsigned char)'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(85,1): undefined reference toOneWire::reset()' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(86,1): undefined reference to
OneWire::select(unsigned char*)'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(87,1): undefined reference toOneWire::write(unsigned char, unsigned char)' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(94,1): undefined reference to
OneWire::read()'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(99,1): undefined reference toOneWire::crc8(unsigned char*, unsigned char)' Thermostat.o: In function
__static_initialization_and_destruction_0':
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\Thermostat\Thermostat\Debug/.././Thermostat.cpp(19,1): undefined reference toOneWire::OneWire(unsigned char)' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libcore.a(HardwareSerial.cpp.o)(1,1): undefined reference to
__cxa_pure_virtual'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libcore.a(HardwareSerial.cpp.o)(1,1): undefined reference to__cxa_pure_virtual' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libcore.a(HardwareSerial.cpp.o)(1,1): undefined reference to
__cxa_pure_virtual'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libcore.a(HardwareSerial.cpp.o)(1,1): undefined reference to__cxa_pure_virtual' C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libcore.a(HardwareSerial.cpp.o)(1,1): undefined reference to
__cxa_pure_virtual'
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino\libcore.a(Print.cpp.o)(1,1): more undefined references to__cxa_pure_virtual' follow collect2: ld returned 1 exit status make: *** [Thermostat.elf] Error 1 make: Leaving directory
C:/Documents and Settings/Jeannot/Mes documents/AVRStudio/Thermostat/Thermostat/Debug'
Done executing task "RunAvrGCC" -- FAILED.
Done building target "CoreRebuild" in project "Thermostat.avrgccproj" -- FAILED.
Done building project "Thermostat.avrgccproj" -- FAILED.Build FAILED.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
J'ai mis en bleu la première erreur qui se produit. Cette erreur me suggère que la librairie OneWire n'a pas été trouvée. Pourtant, on voit (en vert) la ligne d'include du bon répertoire pour le compilateur C++. Je ne sais pas trop ce que je pourrais changer pour que ça fonctionne.
Par ailleurs, j'ai l'impression que le sujet n'intéresse pas grand monde car j'ai publié la procédure il y a une semaine et il n'y a eu aucune réaction, aussi bien dans le forum français qu'anglais. L'utilisation de Studio à la place de l'IDE serait-elle un sujet un peu tabou ?
Hello Jean-Marie,
J'ai comme un doute sur l’intégration du code arduino via un autre ide, ce que je ne comprend pas bien c'est dans le core arduino nous avons le main.cpp (avec les véritable fonctions setup et loop) donc je suppose que l'ide arduino ce charge de le complété en transposant le code du .pde et en faire un main valide avant compilation, ici nous devrions modifier nous même ce main.cpp ?
Maintenant là ou j'ai pas mal de problème avec l’intégration de lib existante ou perso c'est ou ce situe ses lib ou autre par rapport à ce main ?
Pourquoi lorsque je veux créer ma propre lib et y inclure une autre lib existante doit on l'inclure 2 fois, une fois dans la nouvelle lib créée et une fois dans le .pde ,pourquoi mes #define ne sont pas pris en compte à partir du pde ? etc, etc, etc ...
Je crois que le mystère de ton problème ce situe quelque part par là ?
Sinon concernant la participation à ce sujet pourtant très intéressant, je crois que la plupart des gens amateurs qui viennent sur le forum ce concentre d'abord sur le code avec lequel "ils galèrent" avant d'envisagé l’intégration du code dans un autre ide (c'est plus facile du tout cuit pour apprendre :%).
Franchement tu fais un énorme boulot qui même si peux de participant mérite un grand bravo :).
Jean-Marie:
J'ai mis en bleu la première erreur qui se produit. Cette erreur me suggère que la librairie OneWire n'a pas été trouvée. Pourtant, on voit (en vert) la ligne d'include du bon répertoire pour le compilateur C++. Je ne sais pas trop ce que je pourrais changer pour que ça fonctionne.
J'ai bien l'impression que la lib étant dans un sous dossier celle ci n'est tout simplement pas compilé en .a (ou .o) donc il ne sait pas au trouve la classe OneWire:: il doit falloir modifier le makefile pour d'abord compiler les sous dossiers avant de compiler le .cpp principal.
Sinon tente une précompilation à la main :
avr-gcc -c trucmachin.cpp -o trucmachin.o
(commande à faire pour chaque .c ou .cpp) puis
avr-ar rv libtrucmachin.a *.o
Dans le dossier de ta librairie, ensuite fait l'include comme avec libcore.a, normalement ça devrait marcher (devrait car pour moi ça ne marche pas, enfin si 1 fois sur 2 ...).
Jean-Marie:
Par ailleurs, j'ai l'impression que le sujet n'intéresse pas grand monde car j'ai publié la procédure il y a une semaine et il n'y a eu aucune réaction, aussi bien dans le forum français qu'anglais. L'utilisation de Studio à la place de l'IDE serait-elle un sujet un peu tabou ?
Peu de monde utilise Avr-Studio avec l'arduino, ne t'inquiète pas c'est la même chose pour eclipse-arduino
La question du choix de l'ide est quelque peu compliqué avec l'arduino ... si on utilise l'ide arduino c'est pour sa simplicité au détriment des fonctionnalités, si on utilise Avr-Studio ou eclipse on va à l'opposer, et à ce moment il faut ce demander si coder en c "pure" ne serait pas mieux, etc ...
Bonjour Jean Marie
Par ailleurs, j'ai l'impression que le sujet n'intéresse pas grand monde car j'ai publié la procédure il y a une semaine et il n'y a eu aucune réaction, aussi bien dans le forum français qu'anglais. L'utilisation de Studio à la place de l'IDE serait-elle un sujet un peu tabou ?
J'admire la reussite ce ce travail mais je ne suis pas 'client'. C'est sans doute également le cas d'autres personnes qui ont suivi ce fil mais qui , pour telle ou telle raison ne peuvent ou ne souhaitent pas installer AVR Studio 5.......
Disons que ton travail n'a pas encore 'trouvé son marché' ! Patience !!
*Après avoir du utiliser pendant de longues années divers environnements de devpt pour microcontrolleurs 8 bits (Keil, IAR, CodeWarrior, MPLAB, AVR Studio 4...) je goute enfin aujourd'hui à la simplicité de mise en oeuvre ! Ces IDE et leurs successeurs n'ont plus d'intérêt pour moi sans émulateur... et je n'ai pas envie de débourser pour acheter un Dragon !! *
Un grand merci pour vos réconforts. J'étais un peu étonné de l'absence de réaction mais vous avez raison, je me rends bien compte que ce genre de sujet sort des sentiers battus. Moi-même, je suis novice en C, C++ et Arduino, sans compter les makefile et autres linuxeries. C'est à mille lieues de ma formation professionnelle. Donc je dois parfois vraiment m'accrocher car mon manque de connaissances se fait souvent cruellement sentir. En même temps, les satisfactions rencontrées sont à la hauteur des efforts et c'est sans doute pour cela que l'inexploré m'attire.
Enfin, je vous tiendrai au courant lorsqu'il y aura du nouveau.
Bonsoir
Je suis votre topique comme beaucoup, pour essayer d'y trouver quelques informations qui pourraient m'intéresser. (Notamment, comment debuger un sketch) Mais pour le moment, ne connaissant pas AVR studio, je ne vois pas quel intérêt j'aurais à y passer. Il y manque le côté "marketing" : Quel avantage y aurait-il à passer sur AVR ?
Franck
Hello Bubulle (je souris car c'est aussi le nom de mon chat, ou plutôt son surnom car son vrai nom est Aristobulle)
Désolé pour le retard dans ma réponse mais j'étais absent ce week-end.
Tu n'as pas à passer sur AVR car tu y es déjà ! En effet, le chip qui est sur ta carte Arduino est un AVR, probablement de type ATmega328p
Par contre, Studio pourrait aider à débuger un sketch car il permet, par exemple, de surveiller l'évolution des i/o instruction par instruction sans même envoyer le programme dans le microcontrôleur.
Mais dans l'IDE Arduino, tu as déjà un moyen très puissant de débuger : interrompre ton programme à des moments choisis en envoyant sur le "monitor" la valeur de telle ou telle variable et en attendant que tu tapes un caractère dans le moniteur pour continuer le programme. Cela permet de suivre le déroulement du programme à la trace et de trouver exactement pourquoi il ne fait pas ce que tu veux.
Juste pour partager ma façon d'utiliser le framework Arduino dans avrstudio 5 :
A la place d'utiliser la librairie arduino précompilée, j'ai ajouté les sources de celle-ci à mon projet. Dans un dossier "core", tout ce qui se trouve dans arduino/hardware/arduino/cores/arduino + "pins_arduino.h" qui se trouve dans "arduino/hardware/arduino/variants/standard". J'ai fait de même avec les librairies additionnelles que j'utilise (bmp085, dht22, eeprom, liquidcrystal, sdcard, time, virtualwire et wire).
De cette façon tout est recompilé et linké avec la même version d'AVR (Arduino 1.00 utilise AVR-LibC 1.6.4 alors qu'AVR studio utilise AVR-LibC 1.7.1), ce qui devrait éviter bien des soucis.
A noter, deux choses qui m'ont données du fil à retordre :
par défaut, les fichiers ".C" ajoutés ont leur propriété "build action" à "None". Il faut mettre "Compile" à la place. (voir attachement 2)
l'utilisation de la librairie math requiert d'éditer le makefile et de placer le -Wl,-lm à la fin de la ligne du linker, sinon on se retrouve avec des erreurs "R_AVR_13_PCREL relocation truncated to fit" sur les fonctions mathématique lorsque le programme est compilé avec l'indispensable option "-ffunctions-sections" (sans elle la taille du programme explose).
Bonjour
@Jean-Marie: Oui je suis également très intéressé par ce topic. J'ai commencé à installer et à intégrer en suivant ta procédure.
... Mais c'est la trève de noël et ...j'ai aussi plein d'autres vies
Et puis avec l'apparition de la nouvelle release (Arduino 1.0) je me suis aperçu qu'un certain nombre de fonctions avaient changées, code retour (enfin!) fonctions étoffées (je travaille avec un sketch internet et une librairie IR) et comme je suis débutant pour la partie électronique, j'ai décidé de continuer mon projet en 022 puis d'attaquer mon prochain montage avec Studio en intégrant les librairie Arduino 1.0...et une led bleue XD
Sage décision non?! 8)
Bonnes fêtes à tous et merci à tous les "masters" pour vos aides précieuses
Serge
capswiz:
A la place d'utiliser la librairie arduino précompilée, j'ai ajouté les sources de celle-ci à mon projet. Dans un dossier "core", tout ce qui se trouve dans arduino/hardware/arduino/cores/arduino + "pins_arduino.h" qui se trouve dans "arduino/hardware/arduino/variants/standard". J'ai fait de même avec les librairies additionnelles que j'utilise (bmp085, dht22, eeprom, liquidcrystal, sdcard, time, virtualwire et wire).
Tu devrais utiliser le core arduino 0023, il est moins encombré par des class inutile pour le moment (usb pour l'arduino leonardo etc etc).
Pour la compilation tu compile en static avec une dépendance au projet principal je suppose ?
capswiz:
- par défaut, les fichiers ".C" ajoutés ont leur propriété "build action" à "None". Il faut mettre "Compile" à la place. (voir attachement 2)
... tu viens de résoudre mon probléme de linkage ... c'est sur que si les fichiers sont pas compilé ça marche beaucoup moins bien
Hello capswiz, gerse et skywodd
Je suis bien content que ce topic se réveille. j'ai hâte d'essayer les variantes proposées, en particulier la solution de capswiz, car, étant toujours bloqué par l'utilisation des librairies sous Studio5, je n'avais que la solution d'utiliser l'IDE 022 ordinaire.
Ceci dit, j'ai aussi une double si pas une triple vie en période de fêtes. D'ailleurs, je souhaite à tous de passer un excellent réveillon de nouvel an et je donne rendez-vous aux survivants pour commencer une année 2012 très hard (oui/no ?)
skywodd:
Pour la compilation tu compile en static avec une dépendance au projet principal je suppose ?
Ben non, c'est encore plus bête que ça, je copie dans chaque projet de la solution l'ensemble des fichiers de la librairie arduino... Et pour commencer une nouvelle solution je copie l'intégralité du dossier pour pas me retaper à chaque fois l'ajout des fichiers de la librairie dans le projet... Avec les disques durs actuels, on compte plus au gaspillage de méga-octets...
C'est vrai que ce serait plus malin de faire, dans une même solution, un projet avec les librairies et deux autres projets pour les deux modules arduino que je fais communiquer... J'essaierai.
skywodd:
... tu viens de résoudre mon probléme de linkage ... c'est sur que si les fichiers sont pas compilé ça marche beaucoup moins bien
Bien content d'apporter ma très modeste contribution
Hello les amis,
Contrairement aux idées reçues, j’ai consacré une partie du 31 décembre et du 1er janvier à faire des essais avec Studio5. (Par contre, aujourd’hui, j’étais absent toute la journée).
J’ai tout d’abord essayé de suivre les indications de capswiz. Quelque chose doit m’échapper mais impossible de faire reconnaître la librairie (essai avec OneWire). Tu devrais donner plus de détails sur l’emplacement de ton répertoire « core » et tes paramètres de la tool chain.
J’ai ensuite essayé le conseil de Skywodd (« avr-gcc -c trucmachin.cpp -o trucmachin.o » en ligne de commande). Plusieurs essais dans différents répertoires avec copie préalable des fichiers à précompiler dans le répertoire de travail. Rien à faire. Voici la réponse :
Skywodd, ne serait-ce pas plutôt avr-g++ ou avr-c++ qu’il faudrait utiliser, à la place d’avr-gcc ?
Je suis bien conscient que je n’y connais rien dans la suite des tool-chains d’avr-gcc, avr-g++ ou avr-c++.
L’utilisation de make et les paramètres de makefile restent pour moi dans le flou le plus complet. Je ne suis pas en mesure de comprendre ce qui apparaît dans l’Output d’un build. Quelqu’un pourrait-il me renseigner un document bien fait qui pourrait me lever un coin du voile de toute cette nébuleuse héritée de Linux ?
Il faut quand même que je vous relate un épisode pour le moins bizarre. Voici les faits. Dimanche soir, ayant (vaguement) entendu parler des fichiers .o , je tente l’expérience de compiler dans l’ide arduino le sketch blink auquel j’ai ajouté la librairie OneWire. Puis je vais voir le résultat de la compilation (comme pour obtenir le fichier core.a). Je trouve un sous-répertoire OneWire contenant un fichier « OneWire.cpp.o ».
Je copie ce fichier, je l’ajoute au répertoire Debug du projet Studio5 et je relance un Build. Là, c’est la surprise !!!!! L’opération réussit. Je n’en crois pas mes yeux. Je relance une nouvelle fois un rebuild pour être sûr : à nouveau réussi. J’ai failli sauter sur le forum pour annoncer la bonne nouvelle. Mais avant, j’ai voulu m’assurer de tous les paramètres que j’avais choisi. Je retourne dans les properties du projet, je décoche « Use External Makefile » et je vais dans Toolchain.
Mes paramètres sont :
Pour C++ Compiler :
Pour C++ Linker :
Je recoche la case « Use External Makefile » et je m’assure que mon makefile du répertoire Debug possède la correction (report en fin de ligne du paramètre -Wl,-lcore -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino")
Après ces vérifications, je fais un dernier rebuild du programme avant d’aller sur le forum. DAWNED !!! La même erreur que d’habitude :
Depuis, j’ai refais de multiples essais. Je ne suis plus parvenu à un succès.
Je laisse ce mystère à votre sagacité, mais je commence à me demander s’il ne vaudrait pas mieux attendre la version suivante de Studio5.
Je voudrais quand même repartir sur l'expérience de capswiz et éventuellement éviter de recompiler à chaque fois les fichiers courants en les remplaçant par le libcore.a qui semble bien marcher chez moi. Ce sont les librairies additionnelles que je n'arrive pas à faire reconnaître.
Les gars
J'ai de nouveau réussi !!!
3 x de suite
Cette fois, j'ai pris soin de ne toucher à RIEN sauf ce qui était nécessaire pour tout photographier et tout copier.
Encore un peu de patience, je vous prépare un topo avec le maximum d'information et de photos.
Pour ceux qui se débrouillent avec la langue de chèque spire, ils peuvent déjà consulter le site suivant: http://www.engblaze.com/tutorial-using-avr-studio-5-with-arduino-projects/
Jean-Marie:
Contrairement aux idées reçues, j’ai consacré une partie du 31 décembre et du 1er janvier à faire des essais avec Studio5. (Par contre, aujourd’hui, j’étais absent toute la journée).
Quel courage, moi j'étais pas frais pour faire de l'arduino ces jours là
Jean-Marie:
J’ai ensuite essayé le conseil de Skywodd (« avr-gcc -c trucmachin.cpp -o trucmachin.o » en ligne de commande). Plusieurs essais dans différents répertoires avec copie préalable des fichiers à précompiler dans le répertoire de travail. Rien à faire. Voici la réponse :Skywodd, ne serait-ce pas plutôt avr-g++ ou avr-c++ qu’il faudrait utiliser, à la place d’avr-gcc ?
Tu utilise la cmd de windows et lors de l'installation de WinAvr tu n'as pas du cocher "Append to path", donc le dossier C:\WinavrXXXXXXXXX\bin n'est pas dans ta variable PATH et par conséquent le chemin vers avr-gcc est inconnu pour la cmd.
Pour en avoir le coeur sur fait echo %PATH% si tu vois c'est qu'il y a anguille sous roche
PS: avr-g++ c'est le compilateur c++, mais avr-gcc sait tout seul en quoi compiler (c ou c++) en ce basant sur l'extension de fichier.
PPS: tu devrais installer MinGW (+Msys) c'est une console "unix like" avec plein d'utilitaires gnu-linux bien pratique
Jean-Marie:
Je suis bien conscient que je n’y connais rien dans la suite des tool-chains d’avr-gcc, avr-g++ ou avr-c++.
L’utilisation de make et les paramètres de makefile restent pour moi dans le flou le plus complet. Je ne suis pas en mesure de comprendre ce qui apparaît dans l’Output d’un build. Quelqu’un pourrait-il me renseigner un document bien fait qui pourrait me lever un coin du voile de toute cette nébuleuse héritée de Linux ?
Toute les doc que j'ai sont en anglais très technique :~ si j'ai le temps je regarderai de faire un petit article sur les makefiles et (si possible) sur les output de compilation mais pour le moment je garanti rien.
Jean-Marie:
Depuis, j’ai refais de multiples essais. Je ne suis plus parvenu à un succès.
Je laisse ce mystère à votre sagacité, mais je commence à me demander s’il ne vaudrait pas mieux attendre la version suivante de Studio5.
Tu te retrouve avec une erreur de linkage comme moi avec la libcore.a :~ ils ont modifié un truc entre Studio 4 et Studio 5 c'est pas possible, à la main avec makefile ça marche nikel, le même makefile sus Avr Studio -> erreur de linkage ...
Du coup je réfléchi à faire un truc, crée une librairie statique avec dépendance du core arduino, et m'en servir telle quelle sans précompilation mais quelque chose me dis qu'il va y avoir un probléme de linkage
Hello Skywodd,
Merci pour tes infos. Je les verrai plus en détail demain.
Je publie maintenant mes informations sur le Build réussi:
Comme je vous le disais ci-dessus, j’ai finalement réussi à faire un build d’un programme Arduino avec appel à une librairie (OneWire), ceci en grande partie grâce à la lecture du site http://www.engblaze.com/tutorial-using-avr-studio-5-with-arduino-projects/ mentionné ci-dessus. Si vous lisez le site vous trouverez cependant quelques petites différences avec mon exemple.
Dans un premier temps, je vous donne ci-dessous le maximum de fichiers et copies d’écran pour servir de documents de référence et permettre à tout le moins de revenir aux paramètres garantissant une réussite.
Voici d’abord le code minimaliste que j’ai utilisé :
En fait, j’ai compilé dans l’IDE Arduino le code suivant :
Après compilation, le répertoire « C:\Documents and Settings\Jeannot\Local Settings\Temp\buildxxxxxxxxxxxxxxxxx.tmp\ » contient le fichier TutoCumLib.cpp
C’est le texte de ce fichier que j’ai recopié dans Studio5.
La différence entre les deux est l’ajout des 3 lignes suivantes :
#include "WProgram.h"
void setup();
void loop();
A noter que Wprogram.h est inclus entre " " et non entre < > (signification ?)
Les deux autres lignes sont les prototypes des fonctions obligatoires d'Arduino.
Dans le même répertoire temporaire du build de l’Arduino, j’ai fait une copie du fichier core.a pour le mettre dans le répertoire « C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino » et le renommer libcore.a (Ceci avait déjà été fait lors des premiers essais).
Il est temps de passer maintenant aux paramètres de Toolchain (Project -> TutoCumLib Properties -> Toolchain) :
1° C++ Compiler - Symbols : ajouter « F_CPU=16000000L »
2° C++ Compiler – Directories : J’ai ajouté ici le répertoire Arduino qui contient les hardware cores, le répertoire Arduino qui contient la ou les librairies utilisées (OneWire) et mon répertoire AVR_Studuino qui contient le fichier libcore.a
3° C++ Compiler – Optimization :
• Optimization Level : « Optimize for size »
• Other optim. Flags: “-fdata-sections”
• Cocher la case “Prepare for garbage”
4° C++ Compiler – Miscellaneous :
• Other flags : “-fno-exceptions”
• Cocher « Verbose »
• Cocher « Do not delete temporary file »
... Suite dans le message suivant ...
5° C++ Linker – Libraries :
• Libraries : libcore.a
• Library search path : ajouter le répertoire AVR_Studuino où se trouve libcore.a
6° C++ Linker – Optimization : cocher « Garbage collect unused sections
7° C++ Linker – Miscellaneous : ajouter “-Wl,-lcore -Wl,-lm”
Lorsque tout cela est fait, il faut faire un rebuild.
Celui-ci va produire des erreurs mais son but est de produire un fichier makefile.
Dans la fenêtre des properties, prendre maintenant l’onglet « Build* » , cocher Use External Makefile et pointer sur le fichier Makefile créé dans le répertoire …\votre projet\Debug
Ensuite, ouvrir le fichier makefile avec le notepad et rechercher « -WL ». Cela permet de trouver la ligne à modifier.
Modifiez cette ligne en déplaçant vers la fin les flags que nous avons ajoutés, conformément à ceci :
$(QUOTE)$(AVR_APP_PATH)avr-g++.exe$(QUOTE) -Wl,--gc-sections -mmcu=atmega328p -Wl,-Map=$(MAP_FILE_PATH_AS_ARGS) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-lcore -Wl,-lm -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino"
Ne pas oublier de sauvegarder le fichier modifié.
Il reste à ajouter au projet les fichiers de la librairie utilisée : Project -> Add existing items -> OneWire.cpp et OneWire.h
Retourner dans Studio et faire un Rebuild. Celui-ci devrait être successfull et se terminer par ceci :
AVR Memory Usage
----------------
Device: atmega328p
Program: 1164 bytes (3.6% Full)
(.text + .data + .bootloader)
Data: 23 bytes (1.1% Full)
(.data + .bss + .noinit)
make: Leaving directory `C:/Documents and Settings/Jeannot/Mes documents/AVRStudio/TutoCumLib/TutoCumLib/Debug'
Done executing task "RunAvrGCC".
Done building target "CoreBuild" in project "TutoCumLib.avrgccproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\Avr.common.targets" from project "C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoCumLib\TutoCumLib\TutoCumLib.avrgccproj" (entry point):
Done building target "Build" in project "TutoCumLib.avrgccproj".
Done building project "TutoCumLib.avrgccproj".
Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
(Voir ci-dessous la copie de l’Output en fichier attaché.)
Voici encore le contenu des répertoires du projet et de Debug comme contrôle :
En conclusion, il y a quelques différences par rapport aux essais précédents. Il serait utile d’étudier si toutes les différences sont nécessaires pour la réussite du build. Ce sera le travail de demain.
Makefile (4.41 KB)
Rebuild Verbose Output.txt (19.8 KB)
Bon matin à tous.
Je rallume mon PC à 6h30. Première bonne nouvelle : je fais un Build ... et ça marche toujours !
La première chose que je remarque, c'est que le répertoire du projet contient des fichiers qui traînent d'essais précédents. J'essaye donc de supprimer les fichiers "OneWire.o", "OneWire.cpp.o" et "TcfTransactionLog.csv": Rebuild test réussi (y compris en recréant un nouveau Makefile corrigé comme d'habitude).
La réflexion suivante concerne Project ==> Properties ==> Tooolchain ==> AVR/GNU C++ Compiler ==> Directories
Actuellement, j'ai 3 répertoires : le core hardware d'Arduino, le répertoire AVR_Studuino que j'avais créé lors des premiers essais et le répertoire de la librairie OneWire. Comme AVR_Studuino contient déjà une copie de tous les fichiers du core Hardware d'Arduino et une copie des fichiers OneWire, je fais un essai en ne laissant que ce répertoire : Rebuild test réussi.
Les fichiers OneWire.h et OneWire.cpp se trouvent actuellement dans le répertoire AVR_Studuino ET dans le répertoire Project (C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoCumLib\TutoCumLib) ainsi que dans la liste des fichiers de Solution Explorer. Je fais un essai en supprimant ces fichiers de AVR_Studuino : j'obtiens l'erreur "OneWire.h : no such file or directory"
Je fais un nouvel essai en rajoutant les fichiers OneWire dans AVR_Studuino mais en les supprimant de la liste de Solution Explorer ET du répertoire Project : échec.
En rajoutant seulement OneWire.h dans la liste de Solution Explorer : nouvel échec.
En rajoutant seulement OneWire.cpp dans cette liste : Rebuild test réussi.
Je pense en tirer comme conclusion que OneWire.cpp DOIT figurer dans la liste de Solution Explorer. (et le fait de l'ajouter à cette liste entraîne automatiquement une copie physique du fichier dans le répertoire Project.
D'où l'idée de faire un essai en mettant les 2 fichiers OneWire dans la liste, en les effaçant de AVR_Studuino et en ajoutant un path vers le répertoire Project dans C++ Compiler - Directories : Rebuild test réussi.