[Résolu] Intégration du langage Arduino dans AVR Studio 5

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.

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 ?

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"

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:

  • ReadMe.txt est le fichier à lire en premier. Il demande de créer un répertoire et d'y copier les deux autres fichiers.

  • Environnement.txt explique les étapes de préparation à faire une seule fois et valable pour tous les programmes Arduino.

  • Template.txt est à la fois un canevas pour débuter tout nouveau programme et à la fois un mémento des paramètres à régler pour chaque programme.

Si je ne parviens pas à joindre les fichiers demain, j'essayerai de les intégrer dans des fenêtres "Code"

Voici le fichier ReadMe.txt:

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:

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:

/******************************************************************
/* 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() 
{

}

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

@ 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 ?

68tjs:
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.

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.

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

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.

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:

  • 1° pas de grosse différence entre l'IDE et Studio
  • 2° le Serial.begin n'entraîne pas d'augmentation de 10K

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.

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

QuercusPetraea:
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.

Jean-Marie:
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 :stuck_out_tongue_closed_eyes:
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 ...

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....

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 :grin:
  • 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

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.

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.

Vivement que cela soit plus simplifié.

Tu as fais un super taff Jean-Marie.

J'essaierais AVR Studio 5 un de ces 4 :slight_smile:

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.