Template per AVRStudio 6 e define ARDUINO=xxx

Mi sto facendo un template per AVR Studio 6 per poter programmare l'Arduino con la suite Atmel ma mi sogne un dubbio. Sono partiti da un template che ho trovato sul forum (non mi ricordo il link) ma fra le opzioni del compilatore c'è ARDUINO=100. Adesso io uso l'IDE 1.5.2, devi cambiare quella stringa in ARDUINO=152? E comunque dove trovo il punto dove è definita la versione dell'IDE? ho provato a fare una ricerca dentro i file dell'IDE ma non ho trovato niente...

Gia che ci sono faccio qualche altra domanda a chi fosse più esperto di me con AVRStudio...

Sono riuscito a compilare e scaricare il blink, adesso volevo compilare un altro progetto ma ci sono alcune sorprese:

1- Dall'IDE di Arduino basta includere il file *.h che veniva incluso anche il *.cpp, mentre da AVRStudio devo includere il *.h (che fra l'altro dentro il cpp è incluso il .h)... E' normale?

2- Non mi trova i file dentro le cartelle, gli devo dare il percorso preciso. Ad esempio se includo

#include "Ethernet.cpp"

Ottengo

Error   1   Ethernet.cpp: No such file or directory ....

A sua volta, se includo

#include "Ethernet.cpp"

Ottengo

Error   1   w5100.h: No such file or directory  ...

Come posso fare senza editare tutti i file della libreria?

EDIT: Il problema del primo post l'ho risolto, è direttamente l'IDE che da al compilatore il comando "-DARDUINO=152" che gli fa fare appunto quello...

Janos: Come posso fare senza editare tutti i file della libreria?

Mi pare che l'IDE di Arduino prima di compilare copi tutti i file in una unica cartella. Puoi fare lo stesso. Ti posizione nella cartella libraries del core di Arduino, ricerchi i file . nelle sottocartelle, selezioni tutto e li copi in una nuova cartella che metterai tra le directory predefinite di AVR Studio. A parte il file keywords.txt (che su AVR Studio credo non serva) tutti gli altri hanno nomi diversi. Fai lo stesso per le librerie di terze parti. Potresti crearti un file batch che ti estrae tutti i file e li copia in una sola directory in modo che, se un domani cambia l'IDE, lanci il batch e sei a posto.

Però il problema sarà dire al compilatore QUALI .cpp compilare e includere nel file finale.

Sinceramente non ho mai sentito che bisogna includere il file .c o .cpp. Ho sempre creduto che in base all'include .h il compilatore ricercasse la presenza del file .c o .cpp.

Quello lo fa Arduino. Infatti la libreria DEVE stare in una cartella con lo stesso nome del .h e del .cpp
Lo hai affermato anche tu, arduino copia tutto (ma non tutto, solo i h e cpp che servono) in una cartella.

Un compilatore normale, chiede quali .cpp mettere insieme.

Ad esempio CODEBLOCK for Arduino, li prende tutti e mi sembra una scemata. In allegato foto di uno sketch in codeblock.
Penso sia a cura del programmatore levare i .cpp che non servono.

Mettendo tutto in un'unica cartela verrebbe un bel guazzabuglio, a questo punto preferisco definire tutte le cartelle dove fargli cercare i file nelle impostazioni del progetto...

Comunque abbiamo risolto il misteso dei file h e cpp, è già un passo avanti... ;)

Si si, avevo letto, per quello dicevo che il dilemma è risolto, il problema pra è che dentro le librerie tutti gli include includono i file h e non i cpp...

Janos: Gia che ci sono faccio qualche altra domanda a chi fosse più esperto di me con AVRStudio...

Sono riuscito a compilare e scaricare il blink, adesso volevo compilare un altro progetto ma ci sono alcune sorprese:

1- Dall'IDE di Arduino basta includere il file *.h che veniva incluso anche il *.cpp, mentre da AVRStudio devo includere il *.h (che fra l'altro dentro il cpp è incluso il .h)... E' normale?

2- Non mi trova i file dentro le cartelle, gli devo dare il percorso preciso. Ad esempio se includo

#include "Ethernet.cpp"

Ottengo

Error 1   Ethernet.cpp: No such file or directory ....

A sua volta, se includo

#include "Ethernet.cpp"

Ottengo

Error 1   w5100.h: No such file or directory  ...

Come posso fare senza editare tutti i file della libreria?

EDIT: Il problema del primo post l'ho risolto, è direttamente l'IDE che da al compilatore il comando "-DARDUINO=152" che gli fa fare appunto quello...

Guarda cosa scrive Arduino IDE in modalità verbose, poi fai una domanda alla volta qui che io ti rispondo su tutto. In generale, lo sviluppo classico con C/C++ non prevede l'uso di sorgenti fuori il tree di progetto, se ha necessità di usare funzionalità esterne devi prima compilarli linkarle per ottenre una libreria statica.

Poi il tuo progetto deve essere compilato e linkato a questa libreria, ma si perde il vantaggio di Arduino stile, cioè un codice sorgente per tutti i microcontroller. Mentre nel modo classico si è costretti a creare una libreria per ogni microntroller.

Per aggiungere un percorso di ricerca file header e per passare al compilatore altri flag devi usare le seguenti variabili: CXXFLAGS Tutti i flag del compilatore g++ LFLAGS Tutti i flag del linker

Es: CXXFLAGS = -Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -fno-exceptions

Per includere un percorso di ricerca: CXXFLAGS = -I/mypath

Per linkare una libreria statica: LFLAGS = -lnomelib // si tratta di una L minuscola, per nome lib, se questa si chiama libpio si deve scrivere -lpio

Il percorso lo puoi pure specificare -L/mypath -lpio

Ciao.

MauroTec:
Guarda cosa scrive Arduino IDE in modalità verbose, poi fai una domanda alla volta qui che io ti rispondo su tutto.

Infatti il parametro al compilatore “-DARDUINO=152” l’ho visto metendo l’IDE in modalità verbosa…

Per quanto riguarda i parametri per il compilatore ho seguito la guida che ho trovato a questo link:
http://arduino.cc/forum/index.php/topic,95727.0.html

Qualche post sotto flz47655 ha pubblicato anche un template, e sono partito da quello, modificando però il comando di avrdude copiandolo da quello che generava l’IDE.
Detto questo però non ho ancora capito cosa dovrei fare per fargli riconoscere i file .h e per includere i relativi .cpp di conseguenza… Il comando -I penso di averlo già utilizzato, o meglio, lo utilizza AVRStudio indicandogli i percorsi delle cartelle…

Secondo me non puoi fare nulla. Quello di includere di una libreria .cpp in automatico rispetto al .h è una genialata di Arduino, per semplificare il lavoro. Qualsiasi compilatore necessita che gli indichi nel progetto quali cpp vuoi. Oppure puoi indicare quale libreria (.dll o .lib) vuoi "agganciare". Un .lib è il compilato di una o più .cpp messi insieme.

Se AnvStudio sia in grado di fare una cosa del genere (includere il .cpp di un .h), non lo sò. Personalmente dubito lo faccia.

Sarebbe una caxxata non da poco... Sarebbe bastato che l'inclusione dei file cpp, invece di farla fare all'IDE, fosse stata indicata nel file header stesso... Dai, non ci credo che funzioni così...

Allora, ho ricolto così:

Tutti gli include sono con u file .h senza indicare il percorso, quindi nella schermata che ho pubblicato qualche post sopra ho messo tutte le cartelle e sottocartelle di tutte le librerie (ovvio, solo quelle essenziali, gli esempi no). Il problema dei file .cpp l'ho risolto creando una cartella nel progetto e li includo tutti i file .c e .cpp di tutte le librerie, in questo modo AVRStudio trova tutto e quantomeno compila...

E' quello che fa codeblock. Quando crei un progetto, mette anche due cartelle "libreries" e "core" dove dentro ci sono i file di tutte le librerie e i file del core relativi ad arduino uno.

Io l'ho fatto a livello di progetto... Peccato che tutte le librerie non vengono incluse nel template... =( =( =(

P.S. Anche questa cosa l'ho risolta inserendo progetto per progetto i file cpp che mi servono...

P.P.S. Funziona ma non mi soddisfa appieno, se modifico un file cpp di una libreria questo non viene caricato perché una volta che è incluso nel progetto utilizza la copia inclusa.....