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

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:

An English summary is available here:
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 qui mène à cet autre article 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
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:

En acceptant successivement ces 3 programmes, l'installation se poursuit et aboutit finalement à cet écran:

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:

L'article mentionné ci-dessus propose une première opération:

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)

... à suivre

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.

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

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

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.

Si tous ce passe bien vous devriez avoir ceci :

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

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

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)

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.

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

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.

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.

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

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 :

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

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 :

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

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 :

#include <WProgram.h>

int main(void)
{
	init();

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

Voilà où j’en suis pour le moment. La suite à plus tard.

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

Merci Oliv4945,
Tu as certainement raison. Je cherchais midi à 14h.


Pour poursuivre, j’ai pris le paragraphe suivant du teste anglais :

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 :

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 :

-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

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

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

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 :

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

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 : Arduino Playground - HomePage
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 =(

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

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 :sweat_smile: j'avais toujours eu cette options décocher mais j'avais jamais essayé :sweat_smile:
Pourquoi faire simple quand on peut faire compliqué :grin:

(PS: par contre pour les .htaccess ça marche pas, faut toujours utiliser un prog externe pour renommer ... :~)

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

Trop tard pour la suite des essais.
... à suivre ...

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

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

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

Et voici l’Output :

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

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

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

  • Je fais une copie du fichier makefile dans le répertoire parent, c’est-à-dire dans C:\Documents and Settings\Jeannot\Mes documents\AVRStudio\TutoArduino\TutoArduino
  • J’ouvre ce makefile avec notepad. (Attention, ne pas cocher « retour automatique à la ligne » dans le menu « Format »).
  • Je déplace la séquence -Wl,-L"C:\Documents and Settings\Jeannot\Mes documents\Arduino" à la fin de la ligne, comme indiqué dans le texte anglais.
  • Je sauvegarde makefile.

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é :grin:. Voici l’output :

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

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++"

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.

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

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

YOUPYYYYYE !!!!!

On se calme, on se calme !!!

Encore un peu de patience pour les détails.

... à suivre ...

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 ? ^^"

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 :

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

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

Voici la suite du texte anglais :

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
  • Prendre le Menu Tools ==> External Tools

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.

  • Décocher « close on exit » sinon il n’est pas possible de lire la fenêtre d’output (voir ci-dessous).

  • Cliquer OK

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


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

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.