Pages: 1 ... 7 8 [9] 10 11 12   Go Down
Author Topic: [Linux] Aggiornare la toolchain Avr  (Read 11667 times)
0 Members and 1 Guest are viewing this topic.
Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6572
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Disponibile la nuova toolchian per Linux 3.4.1 --> http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx
Contiene:
AVR 32-bit GNU Binutils 2.22 - Binary utilities for AVR 32-bit target (including assembler, linker, etc.)
AVR 32-bit GNU Compiler Collection (avr32-gcc) 4.4.3 - C language and C++ language compiler for AVR 32-bit target.
Newlib (for AVR 32-bit) 1.16.0 - Standard C Library for AVR 32-bit

Codice sorgente disponibile qui --> http://distribute.atmel.no/tools/opensource/Atmel-AVR-Toolchain-3.4.1/avr32/

@Leo:
Binutils dovrebbe essere patchato.  smiley-roll-sweat
« Last Edit: September 06, 2012, 06:02:12 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhm... non sapevo di questa nuova toolchain ufficiale Atmel... son curioso di provarla....
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

2 note dolenti:
1) il .tar.gz con i binari compilati è inscaricabile: arriva un archivio corrotto di un'ottantina di byte. Bisogna prelevare i sorgenti da
http://distribute.atmel.no/tools/opensource/Atmel-AVR-Toolchain-3.4.1/avr/
e poi compilarli (devo ancora finire il download)

2) resta il bug dell'accesso a dati posti oltre il limite dei 128 kB:
Quote
For Mega and Xmega devices, program memory images beyond 128KBytes have limitations and may not work
for few cases
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhm... o sono io stanco oppure le istruzioni per compilare i sorgenti sono molto fumose.... qualcuno ha capito come fare?
Logged


0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2793
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhm... o sono io stanco oppure le istruzioni per compilare i sorgenti sono molto fumose.... qualcuno ha capito come fare?

Forse siamo stanchi entrambe, ma il SOURCES.README lascia a desiderare. Comunque mi pare di capire che puoi scaricare i sorgenti da loro (forse già patchati) oppure patchare i sorgenti vanilla dei rispettivi sviluppatori, cioè sarebbe a dire scaricare gcc-4.6.2 e applicare le patch di atmel, stessa cosa per tutti gli altri pacchetti sorgente vanilla. Come vedi le patch sono cresciute di numero quindi ci hanno lavorato parecchio, ma al momento potrebbe essereci ancora il problema dei 128kb. Quindi io dico che è meglio aspettare la nuova release, tanto quella precedente di atmel va bene almeno per me lavora tranquillamente.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Aggiornamento.
Adesso sto usando la toolchain ufficiale Atmel 3.4.1. Quella precompilata da Atmel, però. Perché compilare i sorgenti è un calvario: ci sono diverse cose da aggiungere sul sistema, e non mi andava di installare centinaia di MB di roba  smiley-sweat
Ho aspettato 1 giorno ed i link ora funzionano, sia quelli a 32 che a 64 bit.

Riassumo come fare:

1) andare a questa pagina:
http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx

2) scegliere la toolchain AVR8 (l'AVR32 è per i micro a 32 bit) compatibile con l'architettura del proprio SO (a 32 o 64 bit)

3) riempire il form con i dati richiesti: mettete un indirizzo e-mail real perché altrimenti non vi arriva il link  smiley-razz. Per "Company" mettete quel che vi pare, io ho messo "MyHome"  smiley-yell

4) aprite il vostro client di posta. Dopo qualche minuto arriva un messaggio con un link da cliccare per confermare la registrazione. Questo vi porta alla pagina di download

5) una volta scaricato il pacchetto (sono circa 80 MB), scompattatelo.

6) Adesso va sostituita alla toolchain distribuita con l'IDE 1.x. Aprite la cartella dove avete l'IDE di Arduino (normalmente arduino-1.0.1) ed entrate in /hardware/tools

7) dentro a questa cartella ne trovate una denominata /avr: questa contiene la toolchain distribuita con l'IDE. Rinominatela in /avr.old.

smiley-cool create una nuova cartella /avr ed entrateci. E' vuota, in questo momento.

9) ora entrate nella cartella dove si sono scompattati i binari della toolchain che avete scaricato (punto 5) e copiate tutte le sottocartelle presenti nella nuova cartella /avr che avete creato al punto 8.

10) un'ultima modifica se usate il core Tiny. Entrate in /hardware/tiny/cores/tiny ed editate il file wiring.h. Intorno alla riga 136 commentate la riga che inizia con #define round(x) in modo che alla fine risulti così:
Code:
//#define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
Questa modifica (che forse dovrete replicare anche sui file wiring.h di altri core, se ne avete) serve per sistemare un bug sulla gestione di questa funzione matematica, funzione che si replica nel delay.h a causa dell'include della libreria matematica che c'è in questo file.

Un solo bug, per ora. Ancora non sono riuscito a compilare lo sketch di test del bug dei 64 kB che aveva preparato tempo fa astrobeed. Compilando per Atmega2560 ottengo:
Code:
avr-gcc: error: unrecognized option '-assembler-with-cpp'
Immagino che sia causato da qualche parametro passato dall'IDE ma non so come risolvere.
Logged


Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2262
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per la guida Leo, proverò su un pc fresco di installazione (kubuntu 11.04).
Ho messo su un hard disk separato anche un'installazione di kubuntu 12.04 perchè dicono vale la pena di provarlo; ho visto che nei repository c'è l'ide 1.0.1 ma proprio non riesco a conviverci... che tu sappia c'è la possibilità di installarci anche l'ide 0022 senza conflitti vari?
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

leo, l'errore è che passi al compilatore il parametro "-assembler-with-cpp", togli quello e tutto fila liscio. Se stai usando l'ide arduino, forse trovi le opzioni al compilatore nel preferencies.txt
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@pelletta:
Personalmente non uso gli IDE dei repo ma solo quelli scaricati dal sito di Arduino. Questo perché così non devo installare nulla, non ho pacchetti da gestire, scompatto solo l'archivio nei miei Documenti e poi creo un collegamento sulla scrivania. In questo modo posso tenere le 2 versioni dell'IDE senza problemi: esse condivideranno solo il file delle preferenze.
Devi tenere a mente che la 1.0.1 non necessita della toolchain installata sul sistema perché ce l'ha integrata mentre la 0022 la vuole. Però se la installi per la 0022 poi essa viene usata anche dalla 1.0.1: se non ricordo male, la 1.0.1 usa la toolchain integrata solo se non la trova sul sistema.

Un "nota bene".
Ultimamente la 0022 non la uso quasi più, alla 1.0.1 ormai hanno convertito quasi tutte le lib.
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

leo, l'errore è che passi al compilatore il parametro "-assembler-with-cpp", togli quello e tutto fila liscio. Se stai usando l'ide arduino, forse trovi le opzioni al compilatore nel preferencies.txt
Che sia errato il parametro lo so, l'ho scritto anch'io  smiley-lol
Ma lo passa l'IDE, non io. E, come ho detto, non so dove si editino le opzioni (non sono nel file preferences.txt).  smiley-sweat
Logged


0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai ragione, è hardcopdato in "./app/src/processing/app/debug/Compiler.java", riga 550;

Code:
static private List getCommandCompilerS(String avrBasePath, List includePaths,
    String sourceName, String objectName, Map<String, String> boardPreferences) {
    List baseCommandCompiler = new ArrayList(Arrays.asList(new String[] {
      avrBasePath + "avr-gcc",
      "-c", // compile, don't link
      "-g", // include debugging info (so errors include line numbers)
      "-assembler-with-cpp",
      "-mmcu=" + boardPreferences.get("build.mcu"),
      "-DF_CPU=" + boardPreferences.get("build.f_cpu"),     
      "-DARDUINO=" + Base.REVISION,
      "-DUSB_VID=" + boardPreferences.get("build.vid"),
      "-DUSB_PID=" + boardPreferences.get("build.pid"),
    }));

    for (int i = 0; i < includePaths.size(); i++) {
      baseCommandCompiler.add("-I" + (String) includePaths.get(i));
    }

    baseCommandCompiler.add(sourceName);
    baseCommandCompiler.add("-o"+ objectName);

    return baseCommandCompiler;
  }


da combiare in

Code:
static private List getCommandCompilerS(String avrBasePath, List includePaths,
    String sourceName, String objectName, Map<String, String> boardPreferences) {
    List baseCommandCompiler = new ArrayList(Arrays.asList(new String[] {
      avrBasePath + "avr-gcc",
      "-c", // compile, don't link
      "-g", // include debugging info (so errors include line numbers)
      "-mmcu=" + boardPreferences.get("build.mcu"),
      "-DF_CPU=" + boardPreferences.get("build.f_cpu"),     
      "-DARDUINO=" + Base.REVISION,
      "-DUSB_VID=" + boardPreferences.get("build.vid"),
      "-DUSB_PID=" + boardPreferences.get("build.pid"),
    }));

    for (int i = 0; i < includePaths.size(); i++) {
      baseCommandCompiler.add("-I" + (String) includePaths.get(i));
    }

    baseCommandCompiler.add(sourceName);
    baseCommandCompiler.add("-o"+ objectName);

    return baseCommandCompiler;
  }
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6572
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se il comando c'è credo che serva, quindi toglierlo solo perchè da errore non mi sembra giusto.
Controllando qui (http://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html) mi sembra però che si siano dimenticati un pezzo.

il comando giusto dovrebbe essere
Code:
"-x assembler-with-cpp",

Potete provarlo e nel caso segnalare il bug?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2793
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ci sono buone probabilità che ad Atmel non interessi il C++ e tanto meno C++/asm per cui non hanno curato questo aspetto e da qui l'errore.

Io continuo a preferire la creazione dei pacchetti nativi della distrò. Per fedora scarico la versione sorgente del pacchetto .srpms la installo nel build tree modifico il file .spec introducendo le nuove patch e poi avvio il builder di pacchetti rpmbuild attendo un po e il pacchetto è pronto per l'installazione/aggiornamento. Stessa cosa accade per ubuntu ma ovviamente i pacchetti sono .deb e il builder si chiama dpkg-buildpackage
http://manpages.ubuntu.com/manpages/lucid/man1/dpkg-buildpackage.1.html

Ovvio che il tempo necessario per ricostruire tutti i pacchetti della toolchain si allunga fino anche ad una settimana nel caso ci sia d'aggiustare qualcosa, ma ne vale la pena la maggior parte delle volte.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

comunque non dovrebbe dare problemi, anzi secondo me è più corretto costringere l'user a scrivewre la giusta estensione per i propri file. Si fa meno confusione.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Mauro:
tempo fa anch'io ero uno di quelli che teneva le ultime versioni degli strumenti di compilazione ma:
1) ero costretto ad un grosso lavoro di debug perché le nuove versioni correggevano bug ma ne introducevano altri, per cui dovevi sempre editare alcuni file
2) non tutto era corretto con le patch tant'è che, ad esempio, binutils-avr 2.22 non andava manco a sparargli, dovevo tenere la versione 2.20 (famoso baco del millis non funzionante).
Insomma, alla fine se posso avere una toolchain ufficiale e funzionante, perché non usarla? Inoltre non sporco neanche il sistema spargendo file a giro dato che resta tutto all'interno dell'IDE di Arduino. Mi sembra una soluzione molto pulita.

@Paolo:
purtroppo non si tratta di un "bug" dato che riguarda una toolchain che non è distribuita con l'IDE di Arduino. Quella funziona, per cui ti potrebbero sempre dire: "perché ne stai usando un'altra? avete fatto tante storie per avere la toolchain con l'IDE ed ora rompete per usarne una diversa?"  smiley-lol

@lesto e paolo:
proverò con le modifiche a ricompilare i sorgenti di arduino
Logged


Pages: 1 ... 7 8 [9] 10 11 12   Go Up
Jump to: