Go Down

Topic: [Résolu] Intégration du langage Arduino dans AVR Studio 5 (Read 26 times) previous topic - next topic

Jean-Marie

#5
Dec 05, 2011, 06:28 pm Last Edit: Jan 01, 2012, 11:41 am by Jean-Marie Reason: 1
Merci Oliv4945,
Tu as certainement raison. Je cherchais midi à 14h.
________________________________________________________________________________________

Pour poursuivre, j'ai pris le paragraphe suivant du teste anglais :

Quote
Now when you use the Arduino IDE it builds a library from all the core source code - eg the code for Serial. This library gets built each time ( did I mention that I dislike how slow it is), and squirrels it away into a funny place that is difficult to find.(look for a folder with a name like C:\Users\fred\AppData\Local\Temp\build5690015305384173079.tmp) I grabbed a copy of it from there so I could use it as part of my VS project. Its name is libcore.a and I copied it to a place where all my projects live C:\Users\fred\Documents\Arduino


J'ai donc compilé le programme BLINK avec l'IDE Arduino et j'ai été voir dans le répertoire suivant :
C:\Documents and Settings\Jeannot\Local Settings\Temp\build4460415576327988215.tmp
Dans ce répertoire, je n'ai pas trouvé le fichier libcore.a mais bien le fichier core.a
Je suppose qu'il s'agit du même fichier. C'est d'ailleurs le seul fichier avec l'extension .a
Je l'ai copié dans le répertoire C:\Documents and Settings\Jeannot\Mes documents\Arduino


On poursuit donc le texte anglais :

Quote
I then went to the "Toolchain\AVR/GNU C++ Linker\Miscellaneous" tab and added this
-Wl,-lcore -Wl,-L"C:\Users\fred\Documents\Arduino"

Oh dear, still get linker errors - "undefined function". This is actually a bug I believe, and I've reported it to the AVR support guys. The problem is that the linker options to use the library are added early on the command line, and should come at the end ( GNU linker otions are order sensitive). The easy workaround is to swap over to using the makefile technique ( Build - tick the checkbox), then just edit the makefile, and move
-Wl,-lcore -Wl,-L"C:\Users\fred\Documents\Arduino"
to the end of the line
SUCCESS !


Je retourne donc dans les "Project properties" ==> Toolchain ==> AVR/GNU C++  ==> Miscellaneous et j'ajoute la ligne suivante :
Code: [Select]
-Wl,-lcore -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\Arduino"
EDIT le 31/12/2011: ATTENTION : Ce n'est pas dans AVR/GNU C++ qu'il faut se rendre mais dans AVR/GNU C++ Linker


Le texte anglais mentionne que ceci n'est pas encore suffisant car ces options du Linker devraient être ajoutées à la fin de la ligne de commande et non au début.
On nous dit que c'est facile et qu'il suffit d'utiliser la méthode du « makefile ».
Admettons !!!
Ah ! J'ai déjà trouvé quelque chose : toujours dans Project Properties, choisir l'onglet « Build » et cocher « Use External Makefile » :



Là, je ne sais plus trop quoi faire.
J'ai essayé d'entrer le répertoire du projet TutoArduino, c'est-à-dire :
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino
Et de choisir le menu Build / Build TutoArduino mais cela provoque une erreur (comme je m'y attendais) :



En effet, ce répertoire ne contient pas de fichier makefile.

J'ai alors décoché la case Use External Makefile et relancé un Build.
L'erreur est maintenant :    Error   1   cannot find -lcore
Et voici l'output :
Code: [Select]
------ Build started: Project: TutoArduino, Configuration: Debug AVR ------
Build started.
Project "TutoArduino.avrgccproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.avrgccproj" (target "Build" depends on it):
Task "RunAvrGCC"
C:\Program Files\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe all
TutoArduino.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:\Program Files\arduino-0022\hardware\arduino\cores\arduino" -I"C:\Program Files\arduino-0022\libraries\LiquidCrystal" -I"C:\Program Files\arduino-0022\libraries\Wire"  -O0 -fpack-struct -fshort-enums -g2 -Wall -c  -mmcu=atmega328p   -MD -MP -MF"TutoArduino.d" -MT"TutoArduino.d" -o"TutoArduino.o" ".././TutoArduino.cpp"
Finished building: .././TutoArduino.cpp
Building target: TutoArduino.elf
Invoking: AVR/GNU C/C++ Linker
"C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-g++.exe" -Wl,-lcore -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\Arduino"  -mmcu=atmega328p  -Wl,-Map=TutoArduino.map -o TutoArduino.elf  TutoArduino.o  
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\Debug(1,1): cannot find -lcore
collect2: ld returned 1 exit status
make: *** [TutoArduino.elf] Error 1
Done executing task "RunAvrGCC" -- FAILED.
Done building target "CoreBuild" in project "TutoArduino.avrgccproj" -- FAILED.
Done building project "TutoArduino.avrgccproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========


On reconnait bien la ligne avec -Wl,-lcore dont il est question dans le texte anglais mais celui-ci dit qu'il faut éditer le fichier Makefile. Mais où est-il ???

Skywodd, au secours, probablement qu'un Linuxien comme toi comprend ce qu'il faut faire car je n'ai aucune expérience avec AVR-GCC et makefile.

... à suivre ...
Amicalement, Jean-Marie

skywodd

#6
Dec 05, 2011, 06:41 pm Last Edit: Dec 05, 2011, 06:48 pm by skywodd Reason: 1
Quote
Skywodd, au secours, probablement qu'un Linuxien comme toi comprend ce qu'il faut faire car je n'ai aucune expérience avec AVR-GCC et makefile.

Un linuxien sous linux ça passe mais sous windows ^^"

De toute évidence tu as cocher "use external makefile" mais sans créer le fichier makefile en question, C'est la technique que j'utilise sous eclipse et que j'utilisai sous avr studio 4, avec la v5 j'essaye de faire sans mais il semblerai que ma technique et la tienne soit finalement identique ...

Voici le makefile : http://arduino.cc/playground/uploads/OpenBSD/BSDmakefile
Alors truc bête il faut le nommer "makefile" sans extension, sous windows le seul moyen que j'ai trouvé c'est d'utiliser le bloc note pour créer le fichier, avec renommer il veut pas ...
Autre truc, il doit être placé au même niveau que les .c/.cpp/.h du core arduino, vu que tu utilise la version précompilé comme moi (.A -> librairie statique) je sais pas si il va fonctionner, il y a de grande chance que l'auteur sur avrfreak utilise un makefile "maison" ...

Edit: Mon probléme de fichier non trouvé était bien du au chemin relatif qui était pas pris en compte (probléme entre visual studio et avr studio ...)
Maintenant j'ai de beau bug de "linkage", libarduino.a est pas linké correctement =(
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Oliv4945


Alors truc bête il faut le nommer "makefile" sans extension, sous windows le seul moyen que j'ai trouvé c'est d'utiliser le bloc note pour créer le fichier, avec renommer il veut pas ...

De mémoire, il faut décocher "masquer les extensions dont le type est connu" dans "options des dossiers"

Intéressant tout ça, merci :)

skywodd

Quote
De mémoire, il faut décocher "masquer les extensions dont le type est connu" dans "options des dossiers"

... tient je me sens un peu c*n d'un coup :smiley-sweat: j'avais toujours eu cette options décocher mais j'avais jamais essayé :smiley-sweat:
Pourquoi faire simple quand on peut faire compliqué :smiley-mr-green:

(PS: par contre pour les .htaccess ça marche pas, faut toujours utiliser un prog externe pour renommer ... :~)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Jean-Marie

Merci pour votre aide, Skywodd et Oliv4945

J'ai d'abord décoché "masquer les extensions dont le type est connu".
Puis, j'ai créé un fichier makefile vide avec Blocnote, mais il avait toujours l'extension .txt
Cependant, j'ai pu le renommer en supprimant l'extension  :)

Trop tard pour la suite des essais.
... à suivre ...
Amicalement, Jean-Marie

Go Up