Pages: 1 ... 3 4 [5] 6   Go Down
Author Topic: [Résolu] Intégration du langage Arduino dans AVR Studio 5  (Read 21773 times)
0 Members and 1 Guest are viewing this topic.
Belgique - Arlon
Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Amicalement, Jean-Marie

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Belgique - Arlon
Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Amicalement, Jean-Marie

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-lol)
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

« Last Edit: March 19, 2012, 04:52:49 pm by satalfa » Logged

Développeur C++ et C# / Arduino lover...

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Belgique - Arlon
Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Amicalement, Jean-Marie

0
Offline Offline
Newbie
*
Karma: 0
Posts: 26
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vivement que cela soit plus simplifié.

Tu as fais un super taff Jean-Marie.

J'essaierais AVR Studio 5 un de ces 4 smiley
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 23
Posts: 2054
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 23
Posts: 2054
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
Code:
#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.

« Last Edit: May 07, 2012, 08:09:57 am by barbudor » Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Belgique - Arlon
Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Amicalement, Jean-Marie

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 23
Posts: 2054
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink)
Merci pour ton travail
Gerse
Logged

Belgique - Arlon
Offline Offline
Full Member
***
Karma: 0
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Amicalement, Jean-Marie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 23
Posts: 2054
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

upload-uno.cmd:
Code:
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:
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
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Pages: 1 ... 3 4 [5] 6   Go Up
Jump to: