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

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.

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 Plateform.h pour ajouter un #include "math.h" avant #include "util/delay.h"
  • 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"
#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.

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.

EDIT : Je viens de rajouter la seule modif de code que j'ai du appliquer dans Plateform.h (ajout d'un include).

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

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.

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

j'ai fait la (presque) même chose en utilisant un fichier bat à la racine mon repertoire arduino :

upload-uno.cmd:

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 :

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 :

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

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 ?

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

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

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 :

.....

ATmega328P

....

ATmega168P

...

... Ca commence a devenir aussi ch...t que de faire des makefile à la main.

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

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

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

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

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

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

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 :

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.