Arduino Forum

International => Français => Tutoriels et cours => Topic started by: Jean-Marie on Dec 03, 2011, 11:38 pm

Title: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 03, 2011, 11:38 pm
Le langage Arduino est remarquable pour sa simplicité, la richesse de ses librairies et l'immense communauté qui ne cesse de faire progresser le concept. L'IDE de programmation est également un outil fantastique et facile à manipuler pour qui débute.

Par ailleurs, ATMEL met gratuitement à la disposition du public AVR Studio 5, un environnement de développement hautement performant qui intègre directement avr-gcc, le langage C du logiciel libre, ainsi que C++.

De là, l'idée de pouvoir utiliser la force et la simplicité d'Arduino dans cet environnement puissant permettant, entre autre, de simuler le fonctionnement du programme en cours de développement et d'en voir virtuellement les effets sur les entrées/sorties sans même devoir uploader le programme dans l'Atmega.

La suite de ce topic représente l'historique de la recherche pour trouver la solution.

Pour ceux qui sont pressés, le résumé de la procédure complète est téléchargeable en pdf à l'adresse ci-dessous:
http://arduino.cc/forum/index.php/topic,81365.msg619862.html#msg619862 (http://arduino.cc/forum/index.php/topic,81365.msg619862.html#msg619862)

An English summary is available here:
http://arduino.cc/forum/index.php/topic,82577.0.html (http://arduino.cc/forum/index.php/topic,82577.0.html)


En faisant une recherche sur le forum, on trouve cet article : http://arduino.cc/forum/index.php/topic,69822.0.html (http://arduino.cc/forum/index.php/topic,69822.0.html) qui mène à cet autre article http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=110776 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=110776) où l'auteur explique, avec relativement peu de détails, comment il est parvenu à compiler et à flasher des programmes Arduino avec leur librairie à partir de l'environnement Studio.

Skywodd et moi souhaitons renouveler cette expérience et, par la même occasion si elle réussit, la rendre plus accessible au monde francophone. Il est évident que tous ceux qui seraient intéressés par le sujet sont invités à nous rejoindre.

Comme il faut un début à tout, voici les premiers balbutiements : l'installation d'AVR Studio 5.

Téléchargement de AVR Studio5 as5installer-full-5.0.1223 ici : http://www.atmel.com/dyn/products/tools_card.asp?tool_id=17212 (http://www.atmel.com/dyn/products/tools_card.asp?tool_id=17212)
Gratuit mais nécessite de s'inscrire, avec email valide.
605 Mb pour la version complète. Temps de téléchargement : 9 minutes
Après lancement de as5installer-full-5.0.1223.exe, il se passe un peu de temps avant de voir quelque chose bouger. puis, vient cet écran:
(https://lh6.googleusercontent.com/-PnhymGCOo-8/TtqeJNSTI0I/AAAAAAAAAhA/OWi6Lc9AdaY/s506/Installation%252520Studio5%252520a.jpg)
En acceptant successivement ces 3 programmes, l'installation se poursuit et aboutit finalement à cet écran:
(https://lh4.googleusercontent.com/-HAQC18KLX8I/TtqeJEUll3I/AAAAAAAAAg4/pbYo-r_FXqU/s507/Installation%252520Studio5%252520b.jpg)

L'installation complète aura duré 47 minutes (mais je n'étais pas constamment à côté du PC pour accepter les licences.

Enfin, le lancement de Studio5:
(https://lh6.googleusercontent.com/-uj2bPzlc4eo/TtqeJEwv4QI/AAAAAAAAAg8/BailFE0aAls/s640/Studio5%252520Start%252520Page.jpg)


L'article mentionné ci-dessus propose une première opération:
Quote
When AVR Studio 5 got launched it looked to be perfect for me. BUT, it didn't support C++ all that well. They've fixed that now ( very recently) -just install the C++ Extension which as of August 2011 is a beta release. Installation is through AVR Studio 5 Tools menu:
Tools -> Extension Manager -> Online Gallery -> AVRGCC CPP(Beta)


J'ai donc fait ce qu'il disait et j'ai installé l'extension AVRGCC C++ (Beta) (voir ci-dessous)
(https://lh4.googleusercontent.com/-kXaWZVMV4bA/TtqklohfRLI/AAAAAAAAAhY/71LZh8RxvNQ/s640/Extension%252520AVRGCC%252520C%25252B%25252B%252520%252528Beta%252529.jpg)

... à suivre
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 04, 2011, 12:40 pm
La suite ... /!\ Pas Encore Finit - En cours de rédaction /!\

Une fois AVR-GCC C++ installé, vous remarquerez qu'il existe un autre "add on" nommé "Terminal Windows", en quelque sorte c'est un équivalent beaucoup plus évolué du Serial Monitor de l'ide arduino.

(http://skyduino.files.wordpress.com/2011/12/serialmonitor.png?w=750)

Une fois les deux "add on" installé il vous sera nécessaire de redémarrer Avr Studio pour que ceux ci soit actif.

Maintenant il faut passer à l'étape la plus complexe, la compilation du "core arduino" et son inclusion dans un sketch arduino.
Pour ce faire nous allons devoir créer un nouveau projet, nous le nommerons "Tuto-Arduino".

(http://skyduino.files.wordpress.com/2011/12/newproject.png?w=495)

Une fois la fenêtre de nouveau projet ouverte, choisissez "c++" puis "C++ Executable".

(http://skyduino.files.wordpress.com/2011/12/project.png?w=750)

Une fois le projet fraichement crée Avr Studio nous demande le micro-contrôleur sur lequel nous allons travaillez, prenons un grand classique, le ATmega328p, utilisé dans 95% des cartes arduino actuelle.

(http://skyduino.files.wordpress.com/2011/12/choixuc.png?w=750)

Si tous ce passe bien vous devriez avoir ceci :

(http://skyduino.files.wordpress.com/2011/12/alldone1.png?w=750)

Il nous faut maintenant créer et compiler le "core arduino", de manière à pouvoir le réutiliser plus tard nous allons l'ajouter en tant que librairie statique.
Pour ce faire, lancez l'ide arduino, compilez un sketch comme Blink, puis rendez vous dans %appdata%\..\Local\Temp (touche windows + R), repérez un dossier build........, ouvrez le, et récupérez le fichier core.a, il s'agit du "core arduino" pré-compilé par l'ide arduino.

Maintenant récupérez une copie de l'ide arduino 0023 (ou 0022), et plus particulièrement du contenu de /hardware/arduino/core/arduino, copiez le dans votre dossier de travail Avr Studio dans un sous dossier libarduino, dans mon cas C:\Users\skywodd\Documents\AVRStudio\Tuto-Arduino\libarduino
Supprimez au passage les fichiers .cpp et .c, il ne nous seront pas utile, gardez uniquement les .h.

L'ide arduino, lorsqu'il compile un sketch, ajoute un certain nombre de chose comme des define, des arguments d'optimisation, ...
Si nous voulons utiliser notre libarduino il va falloir faire de même, à la main.

Click droit sur Tuto-Arduino> properties
Une fois le menu de configuration ouvert naviguez dans l'onglet "Toolchain".

Il va nous falloir créer les définitions en double, un fois pour AVR-GCC et une autre fois pour AVR-G++, rendons nous d'abord dans
"AVR/GNU C Compiler" > Symbols.
Ajoutez ensuite les définitions suivantes :
F_CPU=16000000
ARDUINO=22

(http://skyduino.files.wordpress.com/2011/12/defc.png?w=750)

Rendez vous ensuite dans "AVR/GNU C++ Compiler" > Symbols, et refaite la même manipulation.

(http://skyduino.files.wordpress.com/2011/12/defc1.png?w=750)

Il va nous falloir ensuite activer les optimisations de compilation sans quoi les fonctions comme delay, millis, ... ne fonctionnerons pas correctement.
"AVR/GNU C Compiler" > Optimisations > Optimisation Level -Os (for size)
"AVR/GNU C++ Compiler" > Optimisations > Optimisation Level -Os (for size)

(http://skyduino.files.wordpress.com/2011/12/opti.png?w=750)

Bien à présent nous avons tout les .h ainsi que le "core arduino" précompilé dans notre dossier Tuto-Arduino/libarduino, nous avons mis en place les define, l'optimisation, ne reste plus qu'as définir le chemin de notre dossier libarduino en tant que source d'inclusion.

"AVR/GNU C Compiler" > Directories> Include Paths > Add > ../libarduino
"AVR/GNU C++ Compiler" > Directories> Include Paths > Add > ../libarduino
"AVR/GNU C++ Linker" > Libraries > Libraries > add > libarduino
"AVR/GNU C++ Linker" > Library Search Path > Libraries > add > ../libarduino

Maintenant que la libarduino est prête, il ne reste plus qu'as tester le tout avec un sketch arduino.

Code: [Select]
#include <WProgram.h>

void setup();
void loop();

void setup() {
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

Remarque: L'ide arduino crée les prototypes des fonctions automatiquement, avec Avr Studio ce n'est pas le cas, vous devrez donc vous en occuper vous même, de même chacun de vos sketch arduino devra débuter avec la ligne #include <WProgram.h>.



TODO: comprendre pourquoi mes chemins relatif ne sont pas pris en compte par Avr Studio 5 ...
"WProgram.h: No Such File Or Directory" le chemin d'include est pourtant bon ><
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 04, 2011, 02:50 pm
Félicitations Skywodd.
Je ne m'attendais pas à ce que tu sois déjà si loin.
La seule chose que j'ai faite depuis mon premier message est de tester que l'IDE fonctionne toujours. En effet, Jungo et LibUSB ont la réputation de ne pas faire bon ménage ensemble.

Mais le test s'est révélé positif et je peux toujours uploader un sketch par l'IDE.

Je vais maintenant tenter de suive le même chemin que toi, tout en comparant avec les indications qui sont sur avrfreaks.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 05, 2011, 09:52 am
Hello Skywodd,

Après réflexion, je me suis dit que ce serait plus malin de suivre les indications d'avrfreaks (qui sont un peu différentes des tiennes) et de voir si cela corrige ton erreur à la compilation. En effet, si je suis exactement le même chemin que toi, je vais nécessairement tomber sur la même erreur.

Voici donc en détail ce que j'ai fait.

Pour commencer, j'ai installé comme toi le «Terminal Window » en me disant que cela serait utile de disposer d'un « moniteur » à l'intérieur de Studio et que cette installation n'était probablement pas responsable de l'erreur de compilation.

(https://lh3.googleusercontent.com/-ZnGELW1kMow/TtyDLZQJfkI/AAAAAAAAAh0/Nffh4-oxIu0/s640/Terminal%252520Window.jpg)

Après l'installation du Terminal Window, j'ai créé un nouveau Project C++ comme tu l'a très bien expliqué.

(https://lh3.googleusercontent.com/-thf_fwy1GwE/TtyDKoc0d8I/AAAAAAAAAhw/1JiOzymaabc/s640/New%252520Project.jpg)

Juste 2 petites remarques :
•   Lorsqu'on remplit la case « Name », la case « Solution name » se remplit en même temps avec le même nom. « Solution » est un espace plus large que « Name ». Autrement dit, dans une « Solution », il peut y avoir plusieurs « Name ». Si on veut, on peut donner à Solution un nom différent de Name. En pratique, « Solution name » est le nom du répertoire de Solution et contient « Name », le nom du répertoire de projet. Comme ces 2 répertoires ont par défaut le même nom, cela pourrait être une cause de ton erreur de programmation.
•   Au lieu de choisir Tuto-Arduino comme toi, j'ai nommé mon Project TutoArduino. On ne sait jamais, peut-être qu'un processus interne n'aime pas les traits d'union dans les noms de fichiers.

J'ai également choisi l'ATmega328p comme µC et je me suis retrouvé devant le même écran que toi.

J'ai ensuite pris le paragraphe suivant d'avrfreaks :

Quote
The next challenge was to work out how to use the core Arduino libraries. You need to tell it where to find the headers, and setting the directories was easy enough. I had originally installed the Arduino IDE(version 22) to C:\arduino, so I just added C:\arduino\hardware\arduino\cores\arduino to my directories for the C++ compiler (Properties of the solution/ Toolchain). While I was at it, I added the folder for each of the libraries I wanted to use (OneWire, DallasTemperature, EEPROM etc). To start off, I took a copy of the main source file with the PDE extension and gave it a CPP extension).


J'ai mis un certain temps à trouver comment ajouter les répertoires d'Arduino au compilateur C++ :

(https://lh4.googleusercontent.com/-wXke23U7mMs/TtyDK26Qx6I/AAAAAAAAAho/9Unmtm_I5Ts/s576/Project%252520properties.jpg)

Il y a plusieurs manières :
1.   Click droit sur TutoArduino puis click sur Properties comme sur la photo ci-dessus.
2.   Taper Alt+F7
3.   Choisir le Menu Project / Properties

Effectuer alors les 5 opérations marquées sur la photo suivante :

(https://lh6.googleusercontent.com/-culOMtJCxcU/TtyDK5Vel0I/AAAAAAAAAhs/lVjeKlkTJFk/s640/Include%252520Paths%252520in%252520C%25252B%25252B%252520Compiler.jpg)

Si on ne décoche pas la case du point N°5, cela pourrait être une cause de ton erreur.
EDIT le 31/12/2011: ATTENTION: Faire le point N°5 avant le point N°4.
J'ai également ajouté les répertoires des Librairies suivantes (que je compte utiliser dans un avenir proche) :
•   C:\Program Files\arduino-0022\libraries\LiquidCrystalWire
•   C:\Program Files\arduino-0022\libraries\Wire

(https://lh4.googleusercontent.com/-c9N2C4x-RA4/TtyDKGnXySI/AAAAAAAAAhg/ku8icwB2n4k/s435/Include%252520Libraries.jpg)

A la fin du paragraphe anglais, je n'ai pas compris ceci : "To start off, I took a copy of the main source file with the PDE extension and gave it a CPP extension)." Où se trouve cette « main source file » avec l'extension PDE ?  Tout ce que j'ai trouvé est un fichier Main qui a déjà l'extension .CPP :   C:\Program Files\arduino-0022\hardware\arduino\cores\arduino\main.cpp  et ce fichier contient un skelette de programme :

Code: [Select]
#include <WProgram.h>

int main(void)
{
init();

setup();
   
for (;;)
loop();
       
return 0;
}


Voilà où j'en suis pour le moment. La suite à plus tard.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Oliv4945 on Dec 05, 2011, 01:20 pm
Bonjour,

Il dit juste que pour tester il a pris un fichier .pde qu'il a renommé en .cpp comme fichier source pour le projet
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 05, 2011, 06:28 pm
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
(https://lh3.googleusercontent.com/-66jQL-A0FoM/TtyX8hxcuXI/AAAAAAAAAig/rzCkvVjQvO4/s512/Adding%252520C%25252B%25252B%252520Linker%252520Flags.jpg)

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 » :

(https://lh6.googleusercontent.com/-28Nkf76nedE/TtzQCPpVG2I/AAAAAAAAAi4/CLCROaHsvNc/s512/Use%252520External%252520Makefile.jpg)

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) :

(https://lh3.googleusercontent.com/-_oYg8YGXEsw/TtzQIxorFwI/AAAAAAAAAjE/X0yj9n_VBAA/s516/Invalid%252520external%252520Makefile.jpg)

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 ...
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 05, 2011, 06:41 pm
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 =(
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Oliv4945 on Dec 05, 2011, 07:53 pm

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 :)
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 05, 2011, 09:26 pm
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 ... :~)
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 12:20 am
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 ...
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Oliv4945 on Dec 06, 2011, 02:22 pm
Pour enregistrer sans .txt dans le bloc note il faut changer le "type" quand tu enregistres en "tout les fichiers"

Je sais que c'est de nouveau pas en rapport mais vos recherches m'intéressent :)
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 03:44 pm
@ Oliv4945
Si, si c'est en rapport avec le sujet. Tu sais, nous naviguons un peu dans le brouillard et toute info peut constituer une éclaircie.
__________________________________________________________________________________________

Hier soir, j'avais quand même vite lancé un Build avec un makefile sans extension mais vide. C'était évidemment un échec.

J'avoue que je n'ai pas essayé avec le makefile renseigné par Skywodd car il me semble adapté à BSD et je n'ai aucune connaissance pour y modifier quelque chose.

La nuit m'ayant suggéré quelque essai, j'ai commencé par copier le programme Arduino Blink.pde dans le répertoire de projet TutoArduino et je l'ai renommé TutoArduino.cpp (j'avais renommé le TutoArduino.cpp créé par défaut en TutoArduino.old)
J'ai ensuite ouvert le projet TutoArduino dans Studio5 et j'ai obtenu cette fenêtre :

(https://lh3.googleusercontent.com/-qP90R4_oa9g/Tt4hovtCBBI/AAAAAAAAAjQ/hQNZbdnW1jk/s385/Inconsistent%252520Line%252520Endings.jpg)

J'ai répondu Yes. Je me suis donc retrouvé avec le sketch BLINK dans la fenêtre d'édition de programme

Avec la case Use External Makefile décochée, j'ai relancé un Build.

Tiens ! La liste d'erreurs a changé :

(https://lh6.googleusercontent.com/-BjP8bpZvNGw/Tt4hz31kVQI/AAAAAAAAAjc/K-hzq6cechQ/s640/Build%252520Blink%252520Error%252520List.jpg)

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):
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 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"
.././TutoArduino.cpp: In function 'void setup()':
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.cpp(11,15): 'OUTPUT' was not declared in this scope
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.cpp(11,21): 'pinMode' was not declared in this scope
.././TutoArduino.cpp: In function 'void loop()':
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.cpp(15,20): 'HIGH' was not declared in this scope
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.cpp(15,24): 'digitalWrite' was not declared in this scope
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.cpp(16,13): 'delay' was not declared in this scope
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\TutoArduino.cpp(17,20): 'LOW' was not declared in this scope
make: *** [TutoArduino.o] 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 ==========



Une recherche de fichier « makefile » fait découvrir un fichier makefile créé à la même heure que le Build dans le répertoire suivant :
C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\Debug
Ouverture de ce fichier avec Notepad :

Code: [Select]
################################################################################
# Automatically-generated file. Do not edit!
################################################################################

SHELL := cmd.exe
RM := rm -rf

USER_OBJS :=

LIBS :=
PROJ :=

O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
LIB_AS_ARGS :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
HEX_FLASH_FILE_PATH :=
HEX_FLASH_FILE_PATH_AS_ARGS :=
HEX_EEPROM_FILE_PATH :=
HEX_EEPROM_FILE_PATH_AS_ARGS :=
LSS_FILE_PATH :=
LSS_FILE_PATH_AS_ARGS :=
MAP_FILE_PATH :=
MAP_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=C:/Program Files/Atmel/AVR Studio 5.0/AVR ToolChain/bin/
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=

# Every subdirectory with source files must be described here
SUBDIRS :=


# Add inputs and outputs from these tool invocations to the build variables
C_SRCS +=  \
../TutoArduino.cpp


PREPROCESSING_SRCS +=


ASM_SRCS +=


OBJS +=  \
TutoArduino.o


OBJS_AS_ARGS +=  \
TutoArduino.o


C_DEPS +=  \
TutoArduino.d


C_DEPS_AS_ARGS +=  \
TutoArduino.d


OUTPUT_FILE_PATH +=TutoArduino.elf

OUTPUT_FILE_PATH_AS_ARGS +=TutoArduino.elf

HEX_FLASH_FILE_PATH +=TutoArduino.hex

HEX_FLASH_FILE_PATH_AS_ARGS +=TutoArduino.hex

HEX_EEPROM_FILE_PATH +=TutoArduino.eep

HEX_EEPROM_FILE_PATH_AS_ARGS +=TutoArduino.eep

LSS_FILE_PATH +=TutoArduino.lss

LSS_FILE_PATH_AS_ARGS +=TutoArduino.lss

MAP_FILE_PATH =TutoArduino.map

MAP_FILE_PATH_AS_ARGS =TutoArduino.map

LIB_AS_ARGS +=libTutoArduino.a

ADDITIONAL_DEPENDENCIES:= $(HEX_FLASH_FILE_PATH) $(LSS_FILE_PATH) $(HEX_EEPROM_FILE_PATH) size

OUTPUT_FILE_DEP:= ./makedep.mk

# AVR/GNU C Compiler

./%.o: .././%.c
@echo Building file: $<
@echo Invoking: AVR/GNU C Compiler
$(QUOTE)$(AVR_APP_PATH)avr-gcc.exe$(QUOTE) -funsigned-char -funsigned-bitfields -O0 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99  -mmcu=atmega328p   -MD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo Finished building: $<

./%.o: .././%.cpp
@echo Building file: $<
@echo Invoking: AVR/GNU CPP Compiler
$(QUOTE)$(AVR_APP_PATH)avr-g++.exe$(QUOTE) -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"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo Finished building: $<



# AVR/GNU Assembler




ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif

# Add inputs and outputs from these tool invocations to the build variables

# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)

# AVR/GNU C/C++ Linker
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP)
@echo Building target: $@
@echo Invoking: AVR/GNU C/C++ Linker
$(QUOTE)$(AVR_APP_PATH)avr-g++.exe$(QUOTE) -Wl,-lcore -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\Arduino"  -mmcu=atmega328p  -Wl,-Map=$(MAP_FILE_PATH_AS_ARGS) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS)
@echo Finished building target: $@



$(HEX_FLASH_FILE_PATH): $(OUTPUT_FILE_PATH)
$(QUOTE)$(AVR_APP_PATH)avr-objcopy.exe$(QUOTE) -O ihex -R .eeprom -R .fuse -R .lock -R .signature  $(QUOTE)$<$(QUOTE) $(QUOTE)$@$(QUOTE)

$(HEX_EEPROM_FILE_PATH): $(OUTPUT_FILE_PATH)
-$(QUOTE)$(AVR_APP_PATH)avr-objcopy.exe$(QUOTE) -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex $(QUOTE)$<$(QUOTE) $(QUOTE)$@$(QUOTE) || exit 0

$(LSS_FILE_PATH): $(OUTPUT_FILE_PATH)
$(QUOTE)$(AVR_APP_PATH)avr-objdump.exe$(QUOTE) -h -S $(QUOTE)$<$(QUOTE) > $(QUOTE)$@$(QUOTE)

size: $(OUTPUT_FILE_PATH)
@$(QUOTE)$(AVR_APP_PATH)avr-size.exe$(QUOTE) -C --mcu=atmega328p $(OUTPUT_FILE_PATH_AS_ARGS)

# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS)$(C_DEPS_AS_ARGS) $(EXECUTABLES) $(LIB_AS_ARGS) $(HEX_FLASH_FILE_PATH_AS_ARGS) $(HEX_EEPROM_FILE_PATH_AS_ARGS) $(LSS_FILE_PATH_AS_ARGS) $(MAP_FILE_PATH_AS_ARGS)


Vers la fin du fichier, je retrouve la séquence que j'avais introduite dans les "Project properties" ==> Toolchain ==> AVR/GNU C++  ==> Miscellaneous : -Wl,-lcore -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\Arduino"

Je scinde le message car il est trop volumineux.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 03:45 pm

En suivant les indication de l'article anglais, je fais donc les opérations suivantes :


Dans Studio, j'ouvre Build Properties  \ Build, je coche  "Use External Makefile" et j'introduis C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\makefile
Il n'y a plus qu'à lancer un nouveau Build … SUSPENS

Hé bien NON. C'est raté  :smiley-mr-green:. 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 -C "C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino" -f "makefile" all
process_begin: CreateProcess(NULL, g++ -c -o TutoArduino.o TutoArduino.cpp, ...) failed.
make (e=2): Le fichier spÚcifiÚ est introuvable.
make: *** [TutoArduino.o] Error 2
make: Entering directory `C:/Documents and Settings/Jeannot/Mes documents/AVRStudio/TutoArduino/TutoArduino'
g++    -c -o TutoArduino.o TutoArduino.cpp
make: Leaving directory `C:/Documents and Settings/Jeannot/Mes documents/AVRStudio/TutoArduino/TutoArduino'
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 ==========


A tout hasard, j'ai encore essayé d'ajouter en début de sketch #include <WProgram.h> mais ça n'a rien changé.

Je suis donc en réflexion :smiley-roll-sweat:

... à suivre ...

Heu...  Si d'autres veulent se lancer dans la mélasse, c'est gratuit !

Je me demande si ce ne serait pas le moment d'adresser une demande d'aide à l'auteur de l'article d'origine.

Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 06, 2011, 04:07 pm
Dans ta 1er partie de post il semblerai qu'il ne trouve pas les définitions de HIGH/LOW, OUPUT et les fonctions arduino, de toute évidence c'est qu'il n'as pas trouvé le fichier WProgram.h.

Dans la 2eme partie il n'as pas trouvé l'exécutable "g++"
Quote
process_begin: CreateProcess(NULL, g++ -c -o TutoArduino.o TutoArduino.cpp, ...) failed.


On se retrouve bloquer sur le même probléme avec les fonctions arduino, dans mon cas les fonctions sont bien trouvé dans les .h mais pas dans le core.a et dans ton cas c'est le contraire.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 04:53 pm

On se retrouve bloquer sur le même probléme avec les fonctions arduino, dans mon cas les fonctions sont bien trouvé dans les .h mais pas dans le core.a et dans ton cas c'est le contraire.


Si c'est le cas, en comparant étroitement les deux méthodes, on arrivera peut-être à identifier les bons paramètres.

Pour partir sur de bonnes bases, je propose que nous comparions tout d'abord nos sketchs.

Voici le mien :

Code: [Select]
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
*/
#include <WProgram.h>

void setup() {               
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(1000);              // wait for a second
}


Dis-moi si c'est bon ou si je dois changer quelque chose.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 05:35 pm
YOUPYYYYYE  !!!!!



On se calme, on se calme !!!

Encore un peu de patience pour les détails.

... à suivre ...
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 06, 2011, 05:45 pm
Pour le sketch j'ai le même ^^

Vu ton cri de joie je suppose que tu réussi à trouver LA *bip* de case à cocher qui faisait tout planter ? ^^"
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 06:09 pm
(https://lh4.googleusercontent.com/-TlJWFyuQiTc/Tt5LUAXx7sI/AAAAAAAAAjo/jHwJuFXSl_w/s160/Rire.gif)


Comme le fichier makefile créé automatiquement par Studio5 apparaît dans le répertoire ……..\TutoArduino\TutoArduino\debug  je me suis dit que ce n'était pas très logique de le transplanter dans le répertoire parent  ………\TutoArduino\TutoArduino

Donc, j'ai repris le makefile (corrigé) et le l'ai remis sous \debug

Et voilà. C'est tout simple. Il n'y a plus qu'à cliquer sur Build

Voici l'Output du Build :

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 -C "C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino\Debug" -f "Makefile" all
make: Entering directory `C:/Documents and Settings/Jeannot/Mes documents/AVRStudio/TutoArduino/TutoArduino/Debug'
AVR Memory Usage
----------------
Device: atmega328p
Program:    1340 bytes (4.1% Full)
(.text + .data + .bootloader)
Data:         17 bytes (0.8% Full)
(.data + .bss + .noinit)
make: Leaving directory `C:/Documents and Settings/Jeannot/Mes documents/AVRStudio/TutoArduino/TutoArduino/Debug'
Done executing task "RunAvrGCC".
Done building target "CoreBuild" in project "TutoArduino.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\TutoArduino\TutoArduino\TutoArduino.avrgccproj" (entry point):
Done building target "Build" in project "TutoArduino.avrgccproj".
Done building project "TutoArduino.avrgccproj".

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



Je me propose de faire un résumé concis et précis de tout ce qu'il faut faire pour utiliser AVR Studio5 comme IDE de développement Arduino.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 06, 2011, 06:59 pm
C'est trop tôt pour faire un résumé car il n'y a encore que la moitié de fait.

En effet, jusqu'ici on peut produire le fichier .hex mais pour bien faire, il faudrait pouvoir l'envoyer à la platine Arduino depuis Studio5 et par la voie habituelle, c'est à dire par l'USB et en passant par le Bootloader.

Allez, au boulot .....
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 07, 2011, 11:56 am
Voici la suite du texte anglais :

Code: [Select]
The next thing is to get the program onto my hardware (Arduino UNO). I defined an external tool:
Command: C:\arduino\hardware/tools/avr/bin/avrdude.exe
Arguments: -CC:\arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -cstk500v1 -P\\.\COM3 -b115200 -D -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i




(https://lh3.googleusercontent.com/-ka89TaeB7dM/Tt6FUJP4mwI/AAAAAAAAAjw/IEeFmAXnQiY/s399/External%252520Tools%252520Flash%252520Duemilanove.jpg)


Title : Flash Duemilanove (Vous écrivez le titre que vous voulez mais les arguments ci-dessous conviennent à la Duemilanove)
Command : C:\Program Files\arduino-0022\hardware\tools\avr\bin\avrdude.exe  (Veiller à pointez sur le programme avrdude.exe)
Arguments : -C "C:\Program Files\arduino-0022\hardware\tools\avr\etc\avrdude.conf" -v -v -p atmega328p -c stk500v1 -P COM3 -b 57600 -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i (Veiller à pointer sur le fichier avrdude.conf et à adapter le Port COM).

On voit que la ligne d'arguments a subi une série de modifications par rapport à l'article anglais, ce qui m'a valu pas mal d'essais-erreurs.




Ceci ajoute « Flash Duemilanove » dans le Menu Tools.

En cliquant sur « Flash Duemilanove », avrdude envoie le fichier hex en quelques secondes dans l'Atmega.
Si la case « Prompt for arguments » est cochée, on reçoit d'abord une fenêtre permettant de modifier les arguments de la ligne de commande de avrdude.

Avrdude ouvre une fenêtre d'output permettant de vérifier si tout s'est bien passé :

(https://lh6.googleusercontent.com/-p8TJE6Zwc60/Tt87A41T8YI/AAAAAAAAAj8/JIh0vk7miIg/s512/avrdude%252520output%252520window.jpg)
L'image est trop petite pour être lue. J'espère qu'elle est téléchargeable ici:
https://picasaweb.google.com/lh/photo/Q8_Vi49ceM_ffoZGQjnO6_gm1gMUYGv4zAEVLaYn1Gc?feat=directlink (https://picasaweb.google.com/lh/photo/Q8_Vi49ceM_ffoZGQjnO6_gm1gMUYGv4zAEVLaYn1Gc?feat=directlink)

Comme on peut le voir, avrdude lit les fuses mais ne les affiche pas. Ce serait pourtant une information utile à connaître. Peut-être que Skywodd sait comment faire pour afficher les fuses sans être obligé de les écrire dans des fichiers.

L'objectif que nous nous étions fixés est maintenant en vue : travailler avec l'Arduino à partir de l'environnement sophistiqué d'AVR Studio 5. Il y a certainement encore un tas de choses qui peuvent être peaufinées mais l'essentiel est là.

Il serait probablement judicieux d'attendre la fin des discussions actives (et des changements ou ajouts) pour rédiger la « recette » finale et, pourquoi pas, la traduire en anglais. Après tout, ils ont bien mérité ça.
Title: Re: Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 07, 2011, 12:52 pm

Comme on peut le voir, avrdude lit les fuses mais ne les affiche pas. Ce serait pourtant une information utile à connaître. Peut-être que Skywodd sait comment faire pour afficher les fuses sans être obligé de les écrire dans des fichiers.

Pour avoir les fusibles dans la console en hexa :
Code: [Select]
-U lfuse:r:stdout:h -U hfuse:r:stdout:h -U efuse:r:stdout:h
Edit: j'ai oublié une partie de ma commande >< mais du coup je sais plus si stdout marche avec avrdude ...

Pour le moment moi je continu à me battre avec le linker et core.a ^^"
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 07, 2011, 02:54 pm
Hello Skywodd,

J'ai essayé d'insérer tes paramètres dans la ligne d'arguments mais ça ne marche pas. La fenêtre DOS s'ouvre puis se referme tout de suite et rien d'autre ne se passe. Donc, je reste à la recherche de la solution.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 07, 2011, 09:29 pm
Hello Skywodd,

Dans le post ci-dessus, l'essai était fait avec les paramètres suivants:
Code: [Select]
-U lfuse:r:h -U hfuse:r:h -U efuse:r:h

J'ai réessayé avec ceci :
Code: [Select]
-U lfuse:r:stdout:h -U hfuse:r:stdout:h -U efuse:r:stdout:h

La fenêtre DOS s'ouvre et se ferme immédiatement comme tout à l'heure.
Cependant, lorsque je n'inclus que la lecture d'un seul fuse (low, high ou extended), un fichier nommé "stdout" est créé dans le répertoire C:\Program Files\Atmel\AVR Studio 5.0
Ce fichier contient toujours 0x0, c'est à dire 0 en hexadécimal.

J'ai l'impression que, pour une raison ou une autre, avrdude n'est pas capable de lire les fuses car on voyait déjà ceci sur la fenêtre DOS citée plus haut :

(https://lh6.googleusercontent.com/-ersDXM6ZORA/Tt_Kd1JT0rI/AAAAAAAAAkM/8zrfmFTs-r8/s410/Lecture%252520des%252520fuses.jpg)

Il faudrait que je fasse un essai d'avrdude en-dehors de Studio pour voir.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 08, 2011, 07:53 pm
Quote
La fenêtre DOS s'ouvre et se ferme immédiatement comme tout à l'heure.
Cependant, lorsque je n'inclus que la lecture d'un seul fuse (low, high ou extended), un fichier nommé "stdout" est créé dans le répertoire C:\Program Files\Atmel\AVR Studio 5.0
Ce fichier contient toujours 0x0, c'est à dire 0 en hexadécimal.

Arg! Donc il ne reconnait pas stdout comme sortie console mais comme sortie fichier ... je vois, encore une histoire de modif dans le code source de avrdude ...
J'aurai bien repris mon patch fait pour une ancienne version mais devoir recompiler tout le package winavr me tente pas trop :~
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 08, 2011, 09:36 pm
Hello Skywodd,

Ne t'inquiète pas. La programmation Arduino et le flashage sont fonctionnels sous Studio et c'est ça qui compte. Studio n'est pas fait pour travailler sur les fuses.

As-tu progressé dans tes propres modifications ?

Je suis en train de mettre un peu d'ordre dans les modifications à faire et de rédiger un résumé pour les gens pressés. Dès qu'il est fini, je le publie ici.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 09, 2011, 06:43 pm

As-tu progressé dans tes propres modifications ?

Pour le moment je bloque sur un probléme de linker, les .h sont trouvé et utilisé mais le core.a ne veut pas s'inclure :smiley-yell:
Je vais tenter de compiler le core arduino en librairie statique "peut être que" ...
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 09, 2011, 08:29 pm
Hello Skywodd,

Dans ma rédaction du résumé, j'essaye de rationaliser un peu en rassemblant tous les fichiers nécessaires en un endroit indépendant des répertoires d'Arduino.

Pour l'occasion, j'ai recréé également un nouveau projet. Or je viens de passer plus de 24 h sur le même problème que toi : j'avais oublié de renommer core.a en libcore.a

Vérifie un peu que tu ne buttes pas sur le même obstacle.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 09, 2011, 11:30 pm
J'ai terminé le résumé de ce qu'il faut faire pour intégrer l'Arduino dans l'environnement de développement AVR Studio5.
Je n'ai pas résisté à l'envie d'appeler cette intégration AVR_Studuino

Cela peut paraître compliqué, mais c'est essentiellement dû au fait que j'ai tenté de détailler les divers points de manière précise.

En gros, la méthode consiste à rassembler le "core" Arduino et les librairies en un endroit et à inclure cet endroit dans les répertoires de Studio, de manière à ce que Studio se serve du core Arduino pour compiler le programme. Ensuite, on ajoute avrdude à Studio comme outil externe pour le flashage du fichier hex produit.

Voici l'ensemble de la procédure à suivre:
________________________________________________________________________________________

AVR_Studuino
____________


Arduino intégré dans AVR Studio 5


Installation de AVR Studio 5
•   Télécharger AVR Studio5 as5installer-full-5.0.1223 ici : http://www.atmel.com/dyn/products/tools_card.asp?tool_id=17212
•   Installer AVR Studio 5 et l'ouvrir
•   Installer AVRGCC C++:    Menu Tools --> Extension Manager --> Online Gallery --> AVRGCC C++(Beta)  
•   Installer Terminal Window:    Menu Tools --> Extension Manager --> Online Gallery --> Terminal Window  

Création d'un nouveau projet:
•   Start Page --> New Project --> C++ --> C++ Executable Project
•   Name: Blink
•   Location: …....\Mes documents\AVRStudio (remplacer les …... par ce qui convient)
•   Solution name: Blink
•   --> OK
•   Device Selection: choisir votre Atmega
•   --> OK

Copie des fichiers Arduino
•   Dans Windows, créer le répertoire AVR_Studuino : ….…\Mes documents\AVRStudio\AVR_Studuino
•   Copier dans AVR_Studuino tous les fichiers du répertoire C:\Program Files\arduino-0022\hardware\arduino\cores\arduino
•   Copier dans AVR_Studuino le répertoire entier C:\Program Files\arduino-0022\libraries
•   Ouvrir l'IDE Arduino et charger le sketch « Blink »
•   Copier le sketch et le coller à la place du programme par défaut de Studio
•   Dans Studio, ajouter "#include <WProgram.h>" au-dessus de void setup()
•   Dans l'IDE Arduino, compiler le sketch Blink. Laisser l'IDE ouverte
•   Aller dans le répertoire C:\Documents and Settings\Jeannot\Local Settings\Temp\build……………...tmp
•   Copier le fichier « core.a » dans le répertoire AVR_Stduino et le renommer « libcore.a »
•   Copier C:\Program Files\arduino-0022\hardware\tools\avr\bin\avrdude.exe dans ….…\Mes documents\AVRStudio\AVR_Studuino
•   Copier C:\Program Files\arduino-0022\hardware\tools\avr\etc\avrdude.conf dans ….…\Mes documents\AVRStudio\AVR_Studuino

Inclusion dans Studio des chemins d'accès à ces répertoires
•   Studio : menu Project --> Properties --> onglet Toolchain --> AVR/GNU C++ Compiler --> Directories --> bouton Include
•   Dans la fenêtre "Add Include Paths", introduire le répertoire  ….…\Mes documents\AVRStudio\AVR_Studuino et décocher la case « Relative Path »
•   Introduire également  les répertoires des librairies à utiliser dans ce projet. Exemple : ……\Mes documents\AVRStudio\AVR_Studuino\libraries\Wire

Modification du fichier « makefile »
•   Menu Project --> Properties --> onglet Toolchain --> AVR/GNU C++ Linker --> Miscellaneous
•   Ecrire dans la fenêtre les paramètres suivant : -Wl,-lcore -Wl,-L"……..\Mes documents\ AVRStudio\AVR_Studuino"  
•   Menu général Build --> Build Blink
•   Ouvrir le fichier ……..\Mes documents\AVRStudio\Blink\Blink\Debug\Makefile avec Notepad. Ne pas cocher « Retour automatique à la ligne
•   Dans Notepad, menu Edition --> Rechercher.  Introduire dans la fenêtre WL
•   Déplacer la séquence  -Wl,-lcore -Wl,-L"……..\Mes documents\ AVRStudio\AVR_Studuino"  à la fin de la ligne
•   Sauvegarder le fichier Makefile et fermer Notepad
•   Dans Studio, menu Project --> Properties --> onglet Build
•   Cocher la case "Use External Makefile" et  entrer le chemin d'accès à Makefile :  ……..\Mes documents\AVRStudio\Blink\Blink\Debug\Makefile  

Vérification que la compilation se fait sans erreur
•   Menu général Build --> Build Blink
•   En cas d'erreur, vérifier méticuleusement tous les points ci-dessus avant de continuer

Intégration de la commande d'upload
•   Menu Tools --> External Tools
•   Title : Upload Arduino (peut être modifié)
•   Command : ……….\Mes documents\AVRStudio\AVR_Studuino\avrdude.exe
•   Arguments : -C "………….\Mes documents\AVRStudio\AVR_Studuino\avrdude.conf" -v -v -p atmega328p -c stk500v1 -P COM3 -b 57600 -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i
•   Attention d'adapter -p atmega328p au microcontrôleur utilisé
•   Ne pas cocher « Use Output window »
•   Cocher  "Prompt for arguments"
•   Ne pas cocher "Close on exit"
•   Cliquer « OK »

Vérification que l'upload se fait correctement
•   Menu Tools --> Upload Arduino
•   Possibilité de modifier les paramètres d'avrdude
•   Cliquer « OK »
•   Une fenêtre DOS s'ouvre et montre le travail d'avrdude

________________________________________________________________________________________

Ci-dessous l'ensemble de la procédure sous forme de pdf




Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 10, 2011, 12:16 am
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.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 10, 2011, 09:32 pm
An English summary is available at this address:
http://arduino.cc/forum/index.php/topic,82577.0.html (http://arduino.cc/forum/index.php/topic,82577.0.html)
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 16, 2011, 03:24 pm
J'ai essayé de compiler l'exemple de la librairie OneWire :
http://www.pjrc.com/teensy/td_libs_OneWire.html (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:
Quote
------ 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 directory `C:/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 to `OneWire::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 to `OneWire::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 to `OneWire::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 to `OneWire::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 to `OneWire::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 to `OneWire::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 to `OneWire::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 ?

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: osaka on Dec 16, 2011, 04:25 pm
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  :).
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 16, 2011, 04:27 pm

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 :
Code: [Select]
avr-gcc -c trucmachin.cpp -o trucmachin.o
(commande à faire pour chaque .c ou .cpp) puis
Code: [Select]
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 ...).


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 ...
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: al1fch on Dec 16, 2011, 04:51 pm
Bonjour Jean Marie
Quote
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 !!  

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 16, 2011, 05:42 pm
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.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Bubule on Dec 17, 2011, 06:46 pm
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
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 18, 2011, 11:06 pm
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.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: capswiz on Dec 30, 2011, 11:04 am
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).
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: gerse on Dec 30, 2011, 12:15 pm
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
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Dec 30, 2011, 03:09 pm

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 ?


- 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 :smiley-yell:

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Dec 30, 2011, 04:44 pm
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 ?)
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: capswiz on Jan 02, 2012, 02:54 pm

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...  :smiley-red:  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.


... 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 :smiley-yell:


Bien content d'apporter ma très modeste contribution
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 02, 2012, 10:23 pm
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 :

(https://lh4.googleusercontent.com/-AI4opj3YT3s/TwFsCBXWVBI/AAAAAAAAAkc/lYDbVe8SaHY/s640/Essai%252520pr%2525C3%2525A9compilation%252520librairie%252520OneWire.jpg)

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 :

(https://lh4.googleusercontent.com/-BTDaLEVPXe0/TwIZNSaMUdI/AAAAAAAAAko/zW-mjqanHOE/s640/C%25252B%25252B%252520Compiler.jpg)

Pour C++ Linker :

(https://lh3.googleusercontent.com/-lnNPBwmRDWs/TwIZeoIyt0I/AAAAAAAAAk0/FFQNFEQeMio/s640/C%25252B%25252B%252520Linker.jpg)

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 :

(https://lh4.googleusercontent.com/-oWY0vgPmvn4/TwIdYPlZdQI/AAAAAAAAAlA/RyShgF6emj4/s640/Rebuild%252520error.jpg)


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.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 03, 2012, 06:13 pm
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/ (http://www.engblaze.com/tutorial-using-avr-studio-5-with-arduino-projects/)
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Jan 03, 2012, 10:02 pm

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à :smiley-sweat:


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 :

(https://lh4.googleusercontent.com/-AI4opj3YT3s/TwFsCBXWVBI/AAAAAAAAAkc/lYDbVe8SaHY/s640/Essai%252520pr%2525C3%2525A9compilation%252520librairie%252520OneWire.jpg)

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 ;)


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.


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 ... :smiley-yell:
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 :smiley-roll:
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 03, 2012, 11:49 pm
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/ (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é :


(https://lh3.googleusercontent.com/-QF0ht5x0YO8/TwNd6a-y87I/AAAAAAAAAlQ/U-aDBPvC2bE/s563/TutoCumLib.jpg)

En fait, j'ai compilé dans l'IDE Arduino le code suivant :

(https://lh6.googleusercontent.com/-Gn6VZBNhnPk/TwNh8fZ1OXI/AAAAAAAAAlk/yvtBmiD4iu8/s512/TutoCumLib_pde.jpg)

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 :
Code: [Select]

     #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 »
 

(https://lh3.googleusercontent.com/-d2jMKlqR-hw/TwNpugSl49I/AAAAAAAAAlw/Ig2wzs3VB30/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Compiler%252520-%252520Symbols.jpg)

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



(https://lh5.googleusercontent.com/-FugkAWQdlqg/TwNp-gJzLDI/AAAAAAAAAl8/ciD7FR777l8/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Compiler%252520-%252520Directories.jpg)


3°  C++ Compiler - Optimization :
•   Optimization Level : « Optimize for size »
•   Other optim. Flags: "-fdata-sections"
•   Cocher la case "Prepare for garbage"



(https://lh3.googleusercontent.com/-8rWF85q4U48/TwNqE77IZhI/AAAAAAAAAmI/fMnbRaU089w/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Compiler%252520-%252520Optimization.jpg)


4°  C++ Compiler - Miscellaneous :
•   Other flags : "-fno-exceptions"
•   Cocher « Verbose »
•   Cocher « Do not delete temporary file »


(https://lh3.googleusercontent.com/-Usi9lRh2zhE/TwNqKX1CVfI/AAAAAAAAAmU/kSTEbWDMfBo/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Compiler%252520-%252520Miscellaneous.jpg)

... Suite dans le message suivant ...
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 03, 2012, 11:58 pm
5°  C++ Linker - Libraries :
•   Libraries : libcore.a
•   Library search path : ajouter le répertoire AVR_Studuino où se trouve libcore.a


(https://lh5.googleusercontent.com/-spwAms3vnaQ/TwNqRhNn9TI/AAAAAAAAAmg/yYjQifAp8UE/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Linker%252520-%252520Libraries.jpg)


6°  C++ Linker - Optimization : cocher « Garbage collect unused sections


(https://lh6.googleusercontent.com/-bgl9bqggeMk/TwNqbID64JI/AAAAAAAAAms/La6nrq2fJvE/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Linker%252520-%252520Optimization.jpg)


7°  C++ Linker - Miscellaneous : ajouter "-Wl,-lcore  -Wl,-lm"

(https://lh3.googleusercontent.com/-mXOX-UpHrdU/TwNqkwK8QqI/AAAAAAAAAm4/0NAaj_WLE1E/s640/Build%252520Properties%252520-%252520Toolchain%252520-%252520C%25252B%25252B%252520Linker%252520-%252520Miscellaneous.jpg)



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


(https://lh6.googleusercontent.com/-tRh79PqanbA/TwNrAKre5KI/AAAAAAAAAnQ/ypcWHEIfAKY/s640/Buil%252520Properties%252520-%252520Build%252520-%252520Use%252520External%252520Makefile.jpg)


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 :
Code: [Select]
$(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



(https://lh6.googleusercontent.com/-P_VuZsHvOwc/TwNq2pHgJkI/AAAAAAAAAnE/Fsiwn0VqZmM/s266/Solution%252520Explorer.jpg)

Retourner dans Studio et faire un Rebuild. Celui-ci devrait être successfull et se terminer par ceci :
Code: [Select]

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 :



(https://lh5.googleusercontent.com/-hAxFezkFTdI/TwNrMd1g2dI/AAAAAAAAAno/rAANSnMYjQE/s640/Project%252520Directory.jpg)




(https://lh3.googleusercontent.com/-RMWi84ZzBOA/TwNrHtgNl_I/AAAAAAAAAnc/hCoJtDYNnBk/s640/Debug%252520Directory.jpg)



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.




Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 04, 2012, 10:13 am
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.




Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 04, 2012, 02:49 pm
J'ai également fait un nettoyage du répertoire AVR_Studuino en supprimant tous les fichiers .c et .cpp car ces fichiers sont déjà compilés dans le fichier libcore.a
Je ne conserve que les fichiers header de libcore.a (fichiers .h)

Rebuild test réussi.

Les fichiers compilés dans libcore.a sont les fichiers core de Arduino-0022.Je renomme donc le répertoire AVR_Studuino en "AVR_Studuino_0022". Bien sûr, il faut aussi aller changer le path à 2 endroits :
Rebuild test réussi.

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 05, 2012, 10:37 pm
Hello les gars,

J'ai encore fait quelques petites modifications :



Rebuilt test réussi.

Je crois qu'il serait peut-être bientôt temps de refaire une description générale des choses à faire pour transplanter du code Arduino dans Studio 5 car les choses se sont décantées et sont finalement moins compliquées qu'il ne paraissait au début.

Certains d'entre vous ont-ils déjà fait des essais et ont-ils réussi ?



Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 06, 2012, 08:38 pm
Il y a encore une autre simplification possible.

Dans le C++ Linker / Libraries on peut supprimer la librairie libcore.a et le chemin à son répertoire. Donc le C++ Linker / Libraries peut rester complètement vide.

Mais dans ce cas, le C++ Linker / Miscellaneous doit contenir la ligne suivante :
-Wl,-lcore -Wl,-lm -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino_0022"

Après le rebuild habituel, il faut comme d'habitude aller trafiquer le Makefile  pour mettre  -Wl,-lcore -Wl,-lm -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino_0022" à la fin de la ligne et relancer un rebuild après avoir coché la case "Use External Makefile".

Cette modification rend plus facile le transport du texte à la fin de la ligne car le texte à transférer est en un seul bloc, alors qu'il était en deux blocs dans la version précédente.

Cela me fait penser que pour faire ce transfert de texte, j'avais d'abord conseillé de ne pas cocher le "retour automatique à la ligne". En fait, la manœuvre est tout aussi facile avec le retour automatique à la ligne : sélectionner le texte à transférer, puis Ctrl-x, aller à la fin de la ligne et Ctrl-v.

Voici l'aspect de la ligne avant transfert:
   $(QUOTE)$(AVR_APP_PATH)avr-g++.exe$(QUOTE) -Wl,-lcore -Wl,-lm -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\AVR_Studuino_0022"  -mmcu=atmega328p  -Wl,-Map=$(MAP_FILE_PATH_AS_ARGS) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS)


Et la même ligne après transfert:
   $(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_0022"



Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 10, 2012, 11:15 pm
Putain, mais c'est pas vrai !!!
D'abord un forum inaccessible pendant presque 24 h.
Ensuite, impossibilité de charger un petit fichier de 2531 bytes : The upload folder is full. Please try a smaller file and/or contact an administrator.

Bon, voila ce que je voulais dire.

J'ai préparé un fichier AVR_Studuino_FR.rar (que je n'arrive pas à joindre ci-dessous)
Après décompression, celui-ci montre trois fichier expliquant toutes les étapes à suivre pour compiler les programmes Arduino dans Studio 5:



Si je ne parviens pas à joindre les fichiers demain, j'essayerai de les intégrer dans des fenêtres "Code"
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 10, 2012, 11:22 pm
Voici le fichier ReadMe.txt:
Code: [Select]
Studio 5 permet de compiler et de flasher les programmes et librairies Arduino.

Pour ce faire, il faut créer un répertoire nommé AVR_Studuino_xxxx (remplacer xxxx par le numéro de votre version de l'IDE Arduino, par exemple AVR_Studuino_0022).

Ce répertoire peut être placé n'importe où, par ex. dans ...\Mes Documents\AVRStudio pour rester dans l'environnement de Studio.

Les fichiers Environnement.txt et Template.txt sont à transférer dans le répertoire AVR_Studuino_xxxx.

Ouvrir Environnement.txt et suivre les étapes décrivant les fichiers à copier dans AVR_Studuino_xxxx.


Voici ensuite le fichier Environnement.txt:
Code: [Select]
Environnement.txt
-----------------

Ce fichier décrit la mise en place de l'environnement permettant à Studio 5 de compiler des programmes Arduino.

Les étapes 1 à 4 sont à mettre en place une seule fois et sont valables pour tous les programmes Arduino.


Etape 1 : Création du fichier « libcore.a »
 •  Compiler n'importe quel sketch dans l'IDE Arduino. Ne pas fermer l'IDE.
 •  Aller dans C:\Documents and Settings\[votre identité]\Local Settings\Temp\buildxxxxxxxxxxxxxxxxxx.tmp
 •  Copier le fichier « core.a » dans AVR_Studuino_xxxx
 •  Renommer la copie « libcore.a »

Etape 2 : Copie des fichiers headers du core
 •  Aller dans le répertoire ...\arduino-xxxx\hardware\arduino\cores\arduino
 •  Copier  tous les fichiers « .h » dans le répertoire AVR_Studuino_xxxx

Etape 3 : Copie d'avrdude
 •  Aller dans « …\arduino-xxxx\hardware\tools\avr\bin »
 •  Copier le fichier « avrdude.exe » dans AVR_Studuino_xxxx
 •  Aller dans « …\arduino-xxxx\hardware\tools\avr\etc »
 •  Copier le fichier « avrdude.conf » dans AVR_Studuino_xxxx

Etape 4 : Préparation de Studio 5
 •  Menu Tools ==> Extension Manager
 •  Installer AVRGCC C++(Beta)
 •  Installer Terminal Windows
 •  Fermer et relancer Studio 5

L'étape 5 est à effectuer à chaque nouveau projet

Etape 5 : Création d'un nouveau projet Arduino
 •  A l'ouverture de Studio, cliquer sur "New Project"
 •  Cliquer C++ puis C++ Executable Project
 •  Donner un nom au Projet et à la Solution puis cliquer OK
 •  Studio crée les répertoires [solution] dans AVRStudio et [Project] dans [Solution]
 •  Choisir le microcontrôleur
 •  Studio 5 propose alors un canevas de programme par défaut
 •  Remplacer le texte du canevas par le texte du fichier Template.txt
 •  Le début du fichier contient la suite des étapes à effectuer


Voici enfin le fichier Template.txt:
Code: [Select]
/******************************************************************
/* NOM DU PROGRAMME :
/* AUTEUR :
/* DATE :
/******************************************************************

PREPARATION DE L'ENVIRONNEMENT ARDUINO
--------------------------------------
Voir le fichier ...\AVR_Studuino_xxxx\Environnement.txt


PARAMETRES DE BUILD POUR PROGRAMME ARDUINO
-------------------------------------------

Etape 1 : Paramètres du compilateur C++

 Aller dans Project \ Properties \ Toolchain \ :

 C++ Compiler \ Directories :
•  ...\AVR_Studuino_xxxx
•  ...\AVRStudio\[Solution Name]\[Project Name]

 C++ Compiler \ Optimization :
•  Optimization Level : Optimize for size
•  Other optimization flags : -fdata-sections
•  Cocher la case "prepare functions for garbage collection"

 C++ Compiler \ Miscellaneous :
•  Other flags : "-fno-exceptions"
•  Cocher "Verbose"
•  Cocher "Do not delete temporary file"


Etape 2 : Paramètres du Linker C++

 C++ Linker \ Optimization :
•  cocher "Garbage collect unused sections"

 C++ Linker \ Miscellaneous :
•  -Wl,-lcore -Wl,-lm -Wl,-L"...\AVR_Studuino_xxxx"


Etape 3 : Faire un Rebuild
•  Menu ==> Build ==> Rebuild


Etape 4 : Modifier le fichier Makefile
•  0uvrir ...\AVRStudio\[Solution]\[Project]\Debug\Makefile
•  transférer la séquence -wl,-lcore.........AVR_Stduino_xxxx" à la fin de la ligne
•  Sauvegarder Makefile

Etape 5 : Utiliser le Makefile modifié
•  Aller dans Project \ Proterties \ Build :
•  Cocher la case "Use External Makefile"


Etape 6 : pour utiliser une Librairie
•  Décommenter et compléter #include <[Library Name]> en début de programme
•  Dans la fenêtre "Solution Explorer", clic droit sur le [Project Name]
•  Add ==> Existing Item. Ajouter les fichier .h et .cpp de la Librairie


Etape 7 : pour "uploader" le programme
•  Menu Tools ==> External Tools
•  Title : Upload Arduino
•  Command : ...\AVR_Studuino_xxxx\avrdude.exe
•  Arguments : -C "...\AVR_Studuino_xxxx\avrdude.conf" -v -v -p atmega328p -c stk500v1 -P COM3 -b 57600 -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i
•  Dans la ligne ci-dessus, adapter le chemin du répertoire, l'atmega utilisé et le Port COM
•  L'upload s'obtient par Menu Tools ==> Upload Arduino



*******************************************************************
DEBUT DU PROGRAMME
******************************************************************/



#include <WProgram.h>
//#include <[Library Name]>
#define F_CPU 16000000UL // Fréquence du microcontrôleur


void setup()
{                

}

void loop()
{

}
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Mitchbzh on Jan 22, 2012, 11:41 pm
Bonjour,

Je n'ai pas grand chose à apporter de plus à ce topic, juste un grand bravo pour le gros travail accompli !

Passage de Arduini 1.0 à AVR studio 5 accompli ce week-end sur une Mega2560 R3 grâce à votre support  :)

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: 68tjs on Jan 23, 2012, 12:43 am
@ Jean Marie
J'ai une question sur la taille des fichier *.hex.
Tout d'abord excuses moi si tu y as déjà répondu mais n'ayant pas Windows mais Debian Linux j'ai survolé ton projet de loin.

Dans tout mes essais pour utiliser Eclipse ou Code::blocks, qui contrairement à Avr Studio sont eux multiplateformes, j'ai toujours rencontré un problème d'embonpoint des fichiers hex dès que je faisait appel à une bibliothèque en C++.
Exemple sur un simple blink :
Sans utilisation de Serial j'écris un clignote.c et j'ai la même taille qu'avec l'IDE arduino environ 1koctets.
Si j'initialise une liaison série avec un Serial.begin(9600) je dois faire un clignote.cpp et la taille du fichier hex enfle instantanément de 10koctets. Je suis convaincu que c'est du a des erreurs ou des oublis dans les options de compilation mais malgré toutes mes lectures et tous mes essais je ne vois pas où ça coince. J'ai utilisé la librairie statique obtenue à partir de l'IDE arduino, j'ai aussi recréé entièrement cette librairie statique à partir d'Eclipse rien n'y fait.

Dans tes essais as tu comparé la taille des fichiers hex obtenu avec les deux IDE (023 et avr studio) ?

@ Autre question générale qui s'adresse à tout le monde:
Un nouveau plug-in à été dévelopé pour Eclipse par des gens du forum international :
http://arduino.cc/forum/index.php/topic,70547.0.html
Quelqu'un de la partie francophone a-t-il fait des essais ?
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Jan 23, 2012, 11:42 am

Si j'initialise une liaison série avec un Serial.begin(9600) je dois faire un clignote.cpp et la taille du fichier hex enfle instantanément de 10koctets. Je suis convaincu que c'est du a des erreurs ou des oublis dans les options de compilation mais malgré toutes mes lectures et tous mes essais je ne vois pas où ça coince. J'ai utilisé la librairie statique obtenue à partir de l'IDE arduino, j'ai aussi recréé entièrement cette librairie statique à partir d'Eclipse rien n'y fait.

Tu utilise -Wl -Os ? Parce que la taille qui x10 c'est typique d'une mauvaise configuration du linker et de l'optimisation.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: 68tjs on Jan 23, 2012, 12:33 pm
Oui et aussi -ffunction-sections et -fdata-sections.
Il y a un truc que je ne vois absolument pas et si ça se trouve c'est ENORME visible comme le nez au milieu du visage mais je.....ne.....vois......rien.

C'est pour cela que je cherche à avoir la confirmation que quelqu'un a réussit. Si j'ai cette confirmation ce sera la preuve que c'est possible et que c'est moi qui me débrouille comme un pied.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 23, 2012, 09:30 pm
Désolé, je viens de rentrer d'une semaine au soleil du midi.

Demain, j'essayerai une comparaison de taille du fichier hex avec l'ide et avec Studio.

Merci à Mitchbzh pour le rapport de l'essai avec l'IDE 1.0
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Jan 24, 2012, 08:18 pm
Voici la comparaison de la compilation d'un programme avec Studio 5 (à gauche) et l'IDE Arduino (à droite). Le programme utilise la librairie OneWire et la transmission série pour afficher dans le terminal la T° d'une sonde DS18b20.

(https://lh6.googleusercontent.com/-dkaIRqHIkkw/Tx7v0wZArdI/AAAAAAAAAn4/whSbszd-y20/s512/Comparaison%252520IDE%252520et%252520Studio.jpg)

On voit donc (si on a des yeux comme des loupes) que le programme fait 5760 bytes dans Studio et 5838 bytes dans l'IDE.
Conclusion:


J'imagine qu'une telle augmentation signifie que toutes les fonctions de la librairie sont compilées en fichier .hex

En supprimant tous les appels à Serial, la compilation dans Studio donne 2344 bytes. Autrement dit, les appels à Serial me coûtent 5760 - 2344 = 3416 bytes.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: QuercusPetraea on Mar 01, 2012, 05:08 pm
Hi,
with the AVR Studio release 5.1, Atmel has corrected the problem of the linker. No longer required changing the makefile to move the options -Wl,-lcore  -Wl,-lm after $(LIBS).

greetings
QP
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Mar 01, 2012, 05:58 pm

Hi,
with the AVR Studio release 5.1, Atmel has corrected the problem of the linker. No longer required changing the makefile to move the options -Wl,-lcore  -Wl,-lm after $(LIBS).

greetings
QP


Thank you so much, QuercusPetraea.
That's a great news.

I translate your message in French.

Pour les francophones: QuercusPetraea nous avertit qu'avec la nouvelle version de Studio 5.1, Atmel a corrigé le problème du LINKER. Il n'est désormais plus nécessaire de changer le makefile pour déplacer les options -Wl,-lcore  -Wl,-lm à la fin de la ligne.

Une belle épine hors du pied.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: skywodd on Mar 02, 2012, 03:46 pm

Pour les francophones: QuercusPetraea nous avertit qu'avec la nouvelle version de Studio 5.1, Atmel a corrigé le problème du LINKER. Il n'est désormais plus nécessaire de changer le makefile pour déplacer les options -Wl,-lcore  -Wl,-lm à la fin de la ligne.

Une belle épine hors du pied.

Avr studio 5.1 ... arg! Je vais devoir encore télécharger +350Mo :smiley-yell:
Il faut vraiment qu'ils ajoutent une fonction de mise à jour auto dans avr studio !
Le truc "check for update" qui redirige sur la page de téléchargement c'est ch*ant ...
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Mar 02, 2012, 05:02 pm
Tu as raison, Skywodd, j'ai refait deux fois "check for update" car je ne trouvais pas à lancer un upgrade. Finalement, je me suis résolu à recharger tout. Mais il faut se réenregistrer. Ensuite, ils disent qu'ils envoient un mail...  Je l'attend toujours depuis hier soir....
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: satalfa on Mar 19, 2012, 10:38 pm
Salut à tous,
Merci particulièrement à Jean-Marie et Skywood...

Je viens de suivre la discussion et les explications pour développer mes sketch Arduino dans avrstudio 5.1 avec une base Arduino IDE 1.0.

Pour la procédure de compilation, pas de problème. (pour l'instant, je n'ai fait que des test simples sans librairies externes, mais je suis confiant...).
Par contre, j'ai eu du mal à programmer la carte Arduino par avrdude. Là, par contre, ça n'a pas marché.
J'ai édité la ligne d'upload via avrdude utillisée par l'IDE 1.0, que j'ai appliqué avec succès à mon installation.

L'outils externe permettant l'upload doit être paramétré comme suit :
Remarque : chez moi,
  - l'IDE Arduino 1.0 est installé dans le dossier : D:\electronique\arduino\arduino1.0   .   Il faudra donc remplacer ce chemin par celui de votre installation - à noter que le fait que les chemins ne contiennent pas d'espace est une source de problème en moins :smiley-mr-green:
  - le port série utilisé par l'arduino est COM5

titre:  1. Programmer Arduino   (là, on met ce qu'on veut  XD)
Commande:  D:\electronique\arduino\arduino1.0\hardware\tools\avr\bin\avrdude.exe
Arguments:  -CD:\electronique\arduino\arduino1.0\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM5 -b115200 -D -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i

Utiliser la fenêtre de sortie est coché    ainsi que    Fermer en quittant (grisé mais coché).


Et voilà... comme ça, ça marche !

Il ne resterait plus qu'à trouver comment créer une sorte de template Arduino pour préremplir les options et les chemins du compilateur et du linker pour éviter d'avoir à le faire pour chaque projet, et on sera les rois du pétrole.

Merci encore pour ce travail complet et laborieux.

A+
Olivier

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: psykoprof on Apr 01, 2012, 07:50 pm
Quote
Il ne resterait plus qu'à trouver comment créer une sorte de template Arduino pour préremplir les options et les chemins du compilateur et du linker pour éviter d'avoir à le faire pour chaque projet, et on sera les rois du pétrole.


Je suis en train d'y travailler car je suis un peu fleimard et j'ai pas envie de me taper la config à chaque fois. De plus je ne souhaite pas utiliser les fonctions setup() et loop() du coup je suis en train de me faire un makefile de compilation qui compile le lib core d'arduino sans le main et je vais m'occuper de la compile des libraries afin d'obtenir des lib statique (fichier .a) afin de pouvoir les intégrer automatiquement dans un projet et de générer par la suite un template à intégrer dans AVR STUDIO. Je vais essayer de faire en sorte de pouvoir choisir au moment de la compile de toutes les lib si l'on souhaite une compile pour processeur ATMEGA328P (Uno, Nano, etc..) ou ATMEGA2560 (Arduino mega) en tenant du fichier pins_arduino.h de façon automatique.

Je vous tiens au courant de l'avancement de tout ceci.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on Apr 01, 2012, 09:42 pm
Super, les gars. Excellentes idées.
Vous avez tous mes encouragements. Rendre Arduino et Studio transparents l'un pour l'autre ouvre sans doute des horizons insoupçonnés.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: cyberfred91 on Apr 01, 2012, 09:49 pm
Vivement que cela soit plus simplifié.

Tu as fais un super taff Jean-Marie.

J'essaierais AVR Studio 5 un de ces 4 :)
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: barbudor on May 06, 2012, 06:56 pm
Bonjour

En ayant un peu marre de l'IDE Arduino qui ne sait pas gérer des libs proprement et envisageant d'investir dans un debugger AVRdragon je viens d'installer AVRStudio.

Par contre j'ai voulu choisir une approche différente, c'est à dire bénéficier à 100% de la gestion de Solutions Multi-Projets de VisualStudio avec la gestion des bibliothèques.
Ainsi ma première tentative est de vouloir regénérer la lib Core Arduino depuis AVRStudio au lieu de récupérer une version pré-compilée comme Jean-Marie le propose.

Pourquoi ? Pour plusieurs raisons :
1) Pour pouvoir facilement re-compiler sous plusieurs configurations : ATMega128, 328, 2560, 8MHz, 16MHz, 20MHz, .... qui seront liées au projet principal
2) Pour homogénéïté car le principe de mélanger une lib compilée avec un certain GCC et un programme avec un autre, il y a des risques.

D'ailleurs je tombe immédiatement sur un OS en recompilant la lib Core car le fichier "util/delay.h" fournit avec AVRStudio n'est pas le même que celui fournit l'Arduino.
Le premier est plus récent comme nous l'indique l'en-tête :
AVRStudio util/delay.h : /* $Id: delay.h.in 2189 2010-10-13 09:39:34Z aboyapati $ */
Arduino util/delay/h : /* $Id: delay.h,v 1.5 2007/10/28 23:25:56 joerg_wunsch Exp $ */

De même, et c'est là où le bas blesse, le premier étant plus propre fait des arrondis à partir de fabs() et ceil() que ne fait pas le 2nd.
Et la compil signale fonctions non déclarée.

J'envisage 2 approches possibles :
1) Modifier le projet AVRStudio pour utiliser les mêmes H et Lib que Arduino
2) Modifier les sources Arduino pour fonctionner avec AVRStudio en natif.

Qu'en pensez-vous ?
La 1ère solution a l'inconvénient de nouveau mélanger ensemble des éléments de génération différentes.
La 2nde solution me parait plus propre.
Mais qu'en est-il de la compatibilité future ?
Si je travaille sur des sketches de la communauté ou si je partage mon travail, n'y a t'il pas un risque ?

Mais j'en ai vraiment marre de cet IDE qui n'en est pas un.
Même Turbo C 1.0 sous DOS était plus évolué et savait gérer des libs proprement.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: barbudor on May 06, 2012, 10:01 pm
Bon j'ai réussi à refaire blink !

Etape 0 : Installation de AVRStudio 5.1 de base sans se poser plus de question

Etape 1 : Recréation de la lib Arduino Core sous AVR Studio.

- J'ai recréé un nouveau projet ArduinoCore de type "AVRGCC C++ Static Library Project" en choissant le bon processeur (ATmega328P)
- J'ai ajouté tous les sources de la lib core -> AVRStudio a copier tous les sources dans le répertoire du projet
- J'ai copier manuellement le répertoire "variants" sous le répertoire du projet
- Modif de [font=Courier]Plateform.h[/font] pour ajouter un [font=Courier]#include "math.h"[/font] avant [font=Courier]#include "util/delay.h"[/font]
- J'ai effectué les modifs suivantes dans la configuration du projet :
  AVG/GNU C Compiler
  - Symbols : définir F_CPU=16000000UL et ARDUINO=100
  - Directories : ajouter en chemin relatif le répertoire du projet (..) ainsi que le répertoire standard (../variants/standard)
  - Optimisations : size (-Os)  -fdata-sections   et -ffunction-sections
  - Warnings : All (-Wall)
  AVG/GNU C++ Compiler
   Idem mais en plus :
   - Miscellaneous : -fno-exceptions

Et hop ca compile et ca crée libArduinoCore.a
On ferme la solution

Etape 2 : Projet blink

- Créer un projet Blink de type AVRGCC C++ Executable Projet
--> crée automatiquement un fichier blink.cpp avec un main. On vire tout et on met à la place setup() et loop(). On précède le tout d'un #include "Arduino.h"
Code: [Select]
#include "Arduino.h"
#define LED 13
void setup()
{
pinMode( LED, OUTPUT );
}
void loop()
{
digitalWrite( LED, HIGH ) ;
delay( 500 );
digitalWrite( LED, LOW ) ;
delay( 500 );
}


- J'ai effectué les modifs suivantes dans la configuration du projet :
  AVG/GNU C Compiler
  - Symbols : définir F_CPU=16000000UL et ARDUINO=100
  - Directories : ajouter en chemin relatif le répertoire du projet (..) ainsi que le répertoire standard (../variants/standard)
  - Optimisations : size (-Os)  -fdata-sections   et -ffunction-sections
  - Warnings : All (-Wall)
  AVG/GNU C++ Compiler
   Idem mais en plus :
   - Miscellaneous : -fno-exceptions
  AVG/GNU C++ Linker
   - libraries : files : ajouter libArduinoCore.a
   - libraries : directory : ajouter le répertoire Release situé sous le projet de la lib
   - Optimization : cocher Garbage collect ... (-Wl,--gc-sections)
   - Miscellaneous : ajouter -lm

Et hop ca compile et ca génère blink.hex

Etape 3 : Upload

je me suis pas embeté, j'ai repiqué depuis l'IDE Arduino la ligne de commande avrdude que j'ai collé dans un fichier bat. Pas encore regardé si je pouvais intégrer cela à AVRStudio dans le projet

Bon ben maintenant y' plus qu'a passer aux autres libs et essayer des exemples plus complets.

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on May 07, 2012, 02:58 pm
Bravo Barbudor,

Je n'ai plus pour le moment de platine d'expérimentation configurée en Arduino car je suis sur un projet différent sur ATTiny2313 et en assembleur (que je mettrai à la disposition de tous dès qu'il sera finalisé), sinon j'aurais essayé de suivre tes indications dans la recompilation d'un nouveau core et des projets Arduino.

En tout cas, félicitations ! Ceci ressemble à un pas important vers l'ouverture du monde Arduino au monde plus général des AVR, tout en conservant l'avantage du travail Arduino déjà accompli.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: barbudor on May 07, 2012, 03:11 pm
EDIT : Je viens de rajouter la seule modif de code que j'ai du appliquer dans Plateform.h (ajout d'un include).
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: gerse on May 07, 2012, 03:23 pm
Jean-Marie,

Pour revenir à il y à qq posts déjà concernant l'utilisation d'AVR Studio, j'entame ma première appli avec: un cube 4X4X4

On va voir si le mode d'emploi est clair ;))
Merci pour ton travail
Gerse
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on May 07, 2012, 10:33 pm
Hello Gerse,

Aïe, aïe, aïe. C'est toujours un moment de vérité.
Ceci dit, si ça coince, c'est le signe qu'il y a des oublis, des imprécisions ou des erreurs à corriger. Donc, on s'y remettra.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: gerse on May 08, 2012, 01:04 am
Hello,
J'ai repris le dernier post de Barbudor car je suis d'accord avec son analyse: Autant se refaire une lib et puis basta! (voir peut etre la partager ou encore plus simple exporter le projet core)

... Et je blink aussi ;) yes!

J'ai installé la partie avrdude dans Studio. j'ai pas mal galéré car je n'ai pas trouvé la syntaxe de la version 5.11 (Arduino-1.0)
j'ai donc repris la version 5.4 (Arduino-022)
Donc pour installer le flasheur c'est simple:

Dans AVRStudio
Tools / External Tools

->un formulaire s'affiche

Title : Au hasard AVRDude
Command: le full pathname de la commande avrdude
Arguments: Attention là j'ai fait bourrin:
-C FullPathNameDeAvrdude.conf -p leDevice -c leProgrammer -P lePortUsb -b laVitesse -D -U memtype:w:$(ProjectDir)Debug\$(ItemFileName).hex":i
Ce qui donne pour moi:
-C F:\Arduino\arduino-0022\hardware\tools\avr\etc\avrdude.conf -p atmega328p -cstk500v1 -P\\.\COM5 -b115200  -D -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i

Cocher la case Use Output Window pour voir ce qu'il dit dans le poste!
la trace du programme blink en bas de post
On n'oublie pas de sauver

Maintenant il y a un item AVRDude dans tools.

Je pense que l'on doit pouvoir faire + paramétrable en particulier pour indiquer le repertoire du .hex (mais là j'en ai marre!)
Par contre pour le port USB il faut s'astreindre à brancher l'arduino toujours sur le même port (ce qui n'est pas terrible pour moi d'autant que Arduino-1.0 le détecte automatiquement!)

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e950f
avrdude.exe: reading input file "F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\Debug\blinkblink.hex"
avrdude.exe: writing flash (1142 bytes):

Writing | ################################################## | 100% 0.20s

avrdude.exe: 1142 bytes of flash written
avrdude.exe: verifying flash memory against F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\Debug\blinkblink.hex:
avrdude.exe: load data flash data from input file F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\Debug\blinkblink.hex:
avrdude.exe: input file F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\Debug\blinkblink.hex contains 1142 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.16s

avrdude.exe: verifying ...
avrdude.exe: 1142 bytes of flash verified

avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: barbudor on May 08, 2012, 10:30 am
j'ai fait la (presque) même chose en utilisant un fichier bat à la racine mon repertoire arduino :

upload-uno.cmd:
Code: [Select]

set ARDUINODIR=%~dp0
set AVRTOOLSDIR=%ARDUINODIR%\hardware\tools\avr
echo Arg1=%1
%AVRTOOLSDIR%\bin\avrdude -C%AVRTOOLSDIR%/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM1 -b115200 -D "-Uflash:w:%1:i"


Ma config tools est :
Quote
Title : Upload to UNO
Command : D:\Projets\tools\arduino-1.0\upload-uno.cmd
Argument : $(TargetName)
Initial Dir : $(TargetDir)
Use Output Window coché


Et le résultat est :
Code: [Select]

C:\Program Files (x86)\Atmel\AVR Studio 5.1>set ARDUINODIR=D:\Projets\tools\arduino-1.0\
C:\Program Files (x86)\Atmel\AVR Studio 5.1>set AVRTOOLSDIR=D:\Projets\tools\arduino-1.0\\hardware\tools\avr
C:\Program Files (x86)\Atmel\AVR Studio 5.1>echo Arg1=
Arg1=
C:\Program Files (x86)\Atmel\AVR Studio 5.1>D:\Projets\tools\arduino-1.0\\hardware\tools\avr\bin\avrdude -CD:\Projets\tools\arduino-1.0\\hardware\tools\avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM1 -b115200 -D "-Uflash:w::i"


On voit que dès le début le "Current dir" visible dans le prompt n'est pas le bon.
Et que le "echo Arg1=%1" ne renvoie rien
Donc le passage de $(TargetName) et $(targetDir) ne fonctionne pas !

Zut
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: gerse on May 08, 2012, 12:38 pm
Effectivement toutes les variables ne sont pas enseignées en particulier les Targets.
Il doit manquer un lien entre la compilation du projet et l'execution des tools, mais je n'arrive pas à (encore^^) voir ou ca se passe.
ItemPath="F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\blinkblink.cproj"
ItemDir="F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\\"
ItemFileName="blinkblink"
ItemExt=".cproj"
BinDir=""
ProjectDir="F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\blinkblink\\"
ProjectFileName="blinkblink.cproj"
SolutionDir="F:\Program Files\Atmel\AVRStudio 5.1\blinkblink\\"
SolutionFileName="blinkblink.atsln"
TargetPath=""
TargetDir=""
TargetName=""
TargetExt=""

A noter le double / à la fin de certains path: Un bug de dev ou la variable qui ne s'initialise pas ?
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: gerse on May 08, 2012, 01:26 pm
J'ai regardé dans les variables d'environnement en initialisant 'InitialDirectory"  ainsi que le repertoire de travaille (des fois qu'il fisse un cd ..) et rien. Je pense que ces variables doivent être initialisée avec Microsoft Visual Stdudio.
Quelqu'un aurait installé AVRStudio en mode full avec la quincaillerie Microsoft pour pouvoir tester?
Gerse
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: barbudor on May 08, 2012, 02:35 pm
Un autre truc qui me saoule : le but de reconstruire les libs dans AVR studio c'était de pouvoir définir des configurations pour chaque carte.
Ainsi dans mon projet ArduinoCore je comptais avoir
+- Debug UNO (ATmega328P@16MHz)
+- Release UNO (ATmega328P@16MHz)
+- Debug Duemilanove (ATmega168P@16MHz)
+- Release Duemilanove (ATmega168P@16MHz)
+- Debug Mega2560 (ATmega2560@16MHz)
+- Release mega2560 (ATmega2560@16MHz)

De façon a pouvoir builder chaque version des libs.

Et bien ce n'est pas possible !
Le type de device est global au projet et non pas spécifique à chaque configuration.

Sous VisualStudio j'avais l'habitude de cela pour créer les versions 32 et 64 bits d'une même lib par exemple

Donc là je ne peut pas construire plusieurs versions d'une même lib (ou projet en général) pour plusieurs cibles différentes.

Nul, nul nul et archi-nul !!!!
Grosse colère. ]:D ]:D ]:D ]:D ]:D



EDIT : J'ai réussi à faire ce que je voulais en éditant le fichier projet *.atproj" à la main dans un éditeur et en rajoutant le device à la main :
Quote

.....
  <PropertyGroup Condition=" '$(Configuration)' == 'Release UNO (ATmega328P@16MHz)' ">
    <avrdevice>ATmega328P</avrdevice>
    <ToolchainSettings>
....
  <PropertyGroup Condition=" '$(Configuration)' == 'Release Duemilanove (ATmega168@16MHz)' ">
    <avrdevice>ATmega168P</avrdevice>
    <ToolchainSettings>
...



... Ca commence a devenir aussi ch...t que de faire des makefile à la main.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: patg_ on May 08, 2012, 11:32 pm
Bonjour, j'ai fait une traduction et adaptation du tutoriel de engblaze.com sur la configuration d'AVR Studio 5.1 pour l'Arduino.

Il s'adresse à ceux qui comme moi trouvent l'environnement de développement Arduino un peu trop rudimentaire et qui souhaiteraient profiter de tous les avantages d'un vrai IDE avec leur Arduino.
Il est disponible ici:
http://breizhmakers.over-blog.com/pages/tutoriel-developpement-arduino-avec-avr-studio-5-1-7556975.html (http://breizhmakers.over-blog.com/pages/tutoriel-developpement-arduino-avec-avr-studio-5-1-7556975.html)

Reste à indiquer comment créer un template de projet.

C'est ma première contribution ici et à la communauté Arduino.
Je découvre cette plateforme, mais je pratique le dév et l'électronique depuis, très longtemps  :smiley-mr-green:

 
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on May 09, 2012, 09:41 am
Hello patg_

Merci pour cette adresse. Je n'ai fait que survoler car je n'ai pas beaucoup le temps actuellement et je connaissais le tutorial original en anglais.

Sur ton blog, j'ai également survolé ton projet d'horloge qui rejoint une idée que j'ai toujours derrière la tête: lier une horloge DCF77 à un thermostat-programmateur de chauffage central.
Je n'ai pas approfondi ton projet mais je n'ai pas compris comment tu fais apparaître ton caractère chinois avec une matrice de leds. Par contre, le caractère que tu montres est de toute beauté.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: darki03 on May 22, 2012, 10:12 pm

Bonjour, j'ai fait une traduction et adaptation du tutoriel de engblaze.com sur la configuration d'AVR Studio 5.1 pour l'Arduino.

Il s'adresse à ceux qui comme moi trouvent l'environnement de développement Arduino un peu trop rudimentaire et qui souhaiteraient profiter de tous les avantages d'un vrai IDE avec leur Arduino.
Il est disponible ici:
http://breizhmakers.over-blog.com/pages/tutoriel-developpement-arduino-avec-avr-studio-5-1-7556975.html (http://breizhmakers.over-blog.com/pages/tutoriel-developpement-arduino-avec-avr-studio-5-1-7556975.html)

Reste à indiquer comment créer un template de projet.

C'est ma première contribution ici et à la communauté Arduino.
Je découvre cette plateforme, mais je pratique le dév et l'électronique depuis, très longtemps  :smiley-mr-green:


Bonjour à tous,

J'ai découvert ce fil en me baladant sur le forum et même si je suis pas très expérimenté en développement, je trouve l'environnement AVR studio assez attrayant et surement rempli de fonctionnalités non accessible avec l'IDE Arduino !

J'ai donc téléchargé AVR studio 6 et suivit le petit tutoriel ci-dessus (merci pour la traduction, même si je comprends le Shakespeare c'est quand même mieux en Molière ;)) et j'ai essayé avec un sketch utilisé pour piloter un expandeur de ports I2C MCP23017 qui lui-même pilote un driver de tube nixies et le multiplexage de quatres tubes.

Après quelques erreurs dans les include (il fallait aussi renseigner les dossiers dans le compilateur C car la librairie Wire utilise un utilitaire "Twi.c") j'ai eu un "Build succeed" \o/ (j'ai du sauter sur ma chaise).

pour finir j'ai récupéré les options de la commande avrdude de l'IDE arduino pour le "Upload using programmer" (j'utilise une arduino Uno comme ISP) et la miracle final le programme est chargé dans l'Atmega de ma plaque à trous ;)

Je vous remercie donc pour toutes ces informations ! je dois maintenant me former à cet environnement pour réaliser le programme de mon horloge Nixie (voir petite photo de l'essai)

une petite question au passage :
Quote
Reste à indiquer comment créer un template de projet.


Cela veut dire que l'on pourrait envisager d'éviter de redéfinir les option du compilateur à chaque fois ?

Bonne soirée.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: barbudor on May 22, 2012, 10:23 pm

Cela veut dire que l'on pourrait envisager d'éviter de redéfinir les option du compilateur à chaque fois ?

Exactement !
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: Jean-Marie on May 22, 2012, 10:42 pm
Quote

une petite question au passage :
Quote

Reste à indiquer comment créer un template de projet.


Cela veut dire que l'on pourrait envisager d'éviter de redéfinir les option du compilateur à chaque fois ?


Je ne sais pas au juste ce que recouvre cette phrase de notre ami Patg_ mais on pourrait très bien imaginer que tu écrives le strict début de tout programme (Place pour le Titre, Date, Auteur, includes de base, etc...  avec les options du compilateur).
Ensuite tu vas dans le Menu File et tu choisis "Export Template"
(https://lh5.googleusercontent.com/-PxGCekfqnmA/T7v5LUgI18I/AAAAAAAAAqU/63NiX5fF-zc/s512/Export%2520Template.jpg)
Je n'ai pas essayé personnellement car je suis sur un autre projet mais c'est une piste à explorer.

P.S. Si tu explores, tiens-nous au courant. Merci.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: darki03 on May 22, 2012, 11:58 pm
Bonsoir,

Je viens d'essayer l'exportation de template et c'est effectivement la bonne solution ! j'ai maintenant une nouvelle option dans "New project" que j'ai nommé "Arduino" !
Ensuite on retrouve bien tout ce qui a été paramétré, par contre pour le .cpp il garde le nom de celui du projet source (j'avait tout supprimer du code pour ne laisser que les déclarations minimales et setup() / loop()). Je pense qu'une renommage dans le projet créé devrait suffire !

Merci du tuyau en tout cas ;)

PS: Pour le fichier .cpp, on peut aussi créer un "Project Template" sans .cpp à l'intérieur et créer ensuite un "Item Template" à partir d'un .cpp contenant un structure type setup() / loop(). Après la créattion du projet il suffit d'ajouter un New item à la solution et de sélectionner l'item Template précédemment créé.

En espérant ne pas être trop brouillon dans mes explications.
Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: gerse on May 28, 2012, 08:16 pm
Hello,

Sur le même model qu'AVR Studio 5 je suis passé en AVR Studio 6 lors de l'upgrade Arduino1-0.1. J'ai recompilé toutes les librairies pour en faire des .a, car je trouve ca plus pratique

J'ai créé un template exécutable c++ et un template library pour éviter le pénible de la chose et être pleinement opérationnel pour la suite
Du coup ca fait une arborescence Arduino facilement transportable (ou reloctable)...

J'ai testé avec les samples Blink et EthernetServer... ca marche^^

J'ai gardé la même arborescence qu'Arduino1-0.1. Je pense que cela est une ânnerie et qu'il aurait été préférable de créer une arbo src, include, lib comme sur une vrai machine unix... Je ferais ca pour les prochaines release Arduino ou AVR...

Mon seul regret, c'est de ne pas pouvoir, lors du chargement du code sur l'arduino, récupérer automatique le path 'release' ou 'debug'
Gerse

Title: Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5
Post by: ruptor on Jan 24, 2013, 01:06 pm
Bonjour à tous

J'ai suivi ce tutorial pas à pas mais je n'ai pas les mêmes erreurs que vous :( Le build ne passe pas à cause de cette erreur : 'Arduino' does not name a type....


la cause du problème : #include <WProgram.h>et dans celui ci : Arduino.h d'ecrit...


Ou se situe mon erreur ?

Merci d'avance

J'ai renommé le fichier en arduino.h et maintenant c'est : pins_arduino.h not such file ..... et je n'ai pas ce fichier.... dans la librarie


Bon le build est passé avec 2-3 modifications...

Si je veux piloter un LCD avec la librairie j'ai ca : Error   6   undefined reference to `LiquidCrystal::clear()'

Toutes les erreurs sont sur cette librairie que j'ai pourtant mise.... Essayez avec include "" ou <> ca ne veut pas...

Une idée ?