Go Down

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

Jean-Marie

Hello Skywodd,

Merci pour tes infos. Je les verrai plus en détail demain.
Je publie maintenant mes informations sur le Build réussi:




Comme je vous le disais ci-dessus, j'ai finalement réussi à faire un build d'un programme Arduino avec appel à une librairie (OneWire), ceci en grande partie grâce à la lecture du site http://www.engblaze.com/tutorial-using-avr-studio-5-with-arduino-projects/ mentionné ci-dessus. Si vous lisez le site vous trouverez cependant quelques petites différences avec mon exemple.

Dans un premier temps, je vous donne ci-dessous le maximum de fichiers et copies d'écran pour servir de documents de référence et permettre à tout le moins de revenir aux paramètres garantissant une réussite.

Voici d'abord le code minimaliste que j'ai utilisé :




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



Après compilation, le répertoire « C:\Documents and Settings\Jeannot\Local Settings\Temp\buildxxxxxxxxxxxxxxxxx.tmp\ » contient le fichier TutoCumLib.cpp
C'est le texte de ce fichier que j'ai recopié dans Studio5.

La différence entre les deux est l'ajout des 3 lignes suivantes :
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 »
 



2° C++ Compiler - Directories : J'ai ajouté ici le répertoire Arduino qui contient les hardware cores, le répertoire Arduino qui contient la ou les librairies utilisées (OneWire) et mon répertoire AVR_Studuino qui contient le fichier libcore.a






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






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




... Suite dans le message suivant ...
Amicalement, Jean-Marie

Jean-Marie

5°  C++ Linker - Libraries :
•   Libraries : libcore.a
•   Library search path : ajouter le répertoire AVR_Studuino où se trouve libcore.a





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





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





Lorsque tout cela est fait, il faut faire un rebuild.
Celui-ci va produire des erreurs mais son but est de produire un fichier makefile.

Dans la fenêtre des properties, prendre maintenant l'onglet « Build* » , cocher Use External Makefile et  pointer sur le fichier Makefile créé dans le répertoire …\votre projet\Debug





Ensuite, ouvrir le fichier makefile avec le notepad et rechercher « -WL ». Cela permet de trouver la ligne à modifier.
Modifiez cette ligne en déplaçant vers la fin les flags que nous avons ajoutés, conformément à ceci :
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





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 :












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.




Amicalement, Jean-Marie

Jean-Marie

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.




Amicalement, Jean-Marie

Jean-Marie

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 :

  • les Directories de AVR/GNU C++ Compiler

  • le Library Search Path de AVR/GNU C++ Linker


Rebuild test réussi.

Amicalement, Jean-Marie

Jean-Marie

Hello les gars,

J'ai encore fait quelques petites modifications :


  • Tout d'abord dans C++ Compiler ==> Symbols, j'ai enlevé "F_CPU=16000000L" et j'ai ajouté en début de programme la ligne suivante : #define F_CPU 16000000UL
    Personnellement, je préfère voir en début de programme quel quartz j'ai utilisé pour la mise au point. (Bien sûr, si vous travaillez avec une platine Arduino, le quartz n'est pas interchangeable).


  • Au lieu d'écrire #include "WProgram.h" , j'ai écrit #include <WProgram.h> au début du programme. Cela n'a semble-t-il rien changé à la compilation.


  • J'ai également supprimé en début de programme les 2 lignes de prototype des fonctions setup et loop. La compilation réussit sans ces lignes.



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 ?



Amicalement, Jean-Marie

Go Up