Pages: 1 ... 6 7 [8] 9 10 11   Go Down
Author Topic: [Linux] Aggiornare la toolchain Avr  (Read 14199 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ci siamo.... la toolchain Avr basata su avr-gcc 4.7 è un PACCO.
Oggi per caso, sviluppando la funzione delaySeconds, mi sono accorto che avr-binutils 2.22 è ancora affetta dal famigerato bug di delay/millis che non fa avanzare le funzioni temporali di Arduino. Pazzesco!  smiley-mad

Ho rimesso la toolchain con le patch Atmel.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 495
Posts: 12299
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sei tanto ostinato che prima o poi ce la farai e leggeremo il tanto sospirato EUREKA! smiley-lol
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
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: 325
Posts: 22498
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: 325
Posts: 22498
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: 325
Posts: 22498
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: 30
Posts: 2905
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: 325
Posts: 22498
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: 33
Posts: 2261
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
Online Online
Shannon Member
****
Karma: 129
Posts: 10444
:(){:|:&};:
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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
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: 325
Posts: 22498
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
Online Online
Shannon Member
****
Karma: 129
Posts: 10444
:(){:|:&};:
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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
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: 30
Posts: 2905
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

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