Magari è cosa nota, ma non mi sembra di aver visto informazioni in merito nella sezione Italiana ...
Questi giorni, giochicchiando con gli ATtiny85, a seconda del codice (... che veniva compilato correttamente per ATmega328 ...ed ovviamente era nei limiti di memoria dell'ATtiny), ricevevo alla fine della compilazione l'errore :
relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25/libgcc.a(_exit.o)
Facendo delle ricerche ho scoperto che il problema è dato da un buco presente nel linker che arriva con l'IDE di Arduino.
E' stato difatti sufficiente sostituire "ld" originale con quello più aggiornato che, per MAC, è disponibile all'interno del CrossPack per vedere completare la compilazione senza problemi.
In pratica, per sicurezza prima è meglio salvare il vecchio linker :
Probabilmente, gli utenti Win e Linux possono recuperarlo dall'ultima ToolChain pre-compilata di Atmel ... ma NON ho verificato la cosa quindi ... tutto da provare !
Guglielmo
P.S. : Se la cosa era già stata risolta in altro modo, mi scuso per la duplicazione di informazioni e vi prego di segnalarmi DOVE, nella sezione Italiana, se ne era parlato
Il problema è che ld appartiene al pacchetto binutils che cresce di release man mano che cresce di release il compilatore gcc e la avr-libc, usando ld di una versione precedente potrebbe portare a risultati inaspettati, mentre ci sono buone probrabilità che sia compatibile ld di una versione più recente.
Non ho indagato, ma mi pare che il linker trovi il simbolo "exit" nella libgcc.a più di una volta e normalmente dovrebbe risolvere senza dare errore, ricordo qualcosa del tipo: ora il nuovo linker non va in confusione quando trova due simboli e sa cosa fare.
Di questo errore nella sezione Italiana io non ricordo di averne visto alcun post.
MauroTec:
...
Non ho indagato, ma mi pare che il linker trovi il simbolo "exit" nella libgcc.a più di una volta e normalmente dovrebbe risolvere senza dare errore, ricordo qualcosa del tipo: ora il nuovo linker non va in confusione quando trova due simboli e sa cosa fare.
...
La cosa strana è che il problema appare in modo del tutto casuale quando il codice comincia a raggiungere i 4 KB (circa il 50% del disponibile sul ATtiny85).
Levi un'istruzione da una parte e scompare, ne metti un'altra da un'altra parte e riappare ... sembra senza una logica se non le dimensioni del codice da linkare ...
Probabilmente un subdolo buco di una vecchia versione di ld (... quella che arriva con l'IDE è la 2.19, quella con cui l'ho rimpiazzato è la 2.22, quella dell'ultima toolchain vedo che è la 2.23.1).
Interessante è anche il risultato delle emulazioni supportate ...
Originale (2-19) :
avr2
avr1
avr25
avr3
avr31
avr35
avr4
avr5
avr51
avr6
avrxmega1
avrxmega2
avrxmega3
avrxmega4
avrxmega5
avrxmega6
avrxmega7
Quello che non mi da problemi (2.22) :
avr2
avr1
avr25
avr3
avr31
avr35
avr4
avr5
avr51
avr6
avr7
avrxmega1
avrxmega2
avrxmega3
avrxmega4
avrxmega5
avrxmega6
avrxmega7
avrtiny10
Quello della ultima ToolChain (2.23.1) :
avr2
avr1
avr25
avr3
avr31
avr35
avr4
avr5
avr51
avr6
avr7
avrxmega1
avrxmega2
avrxmega3
avrxmega4
avrxmega5
avrxmega6
avrxmega7
avrtiny
... voglio fare delle prove anche con l'ultimo (2.23.1) e vedere se ci sono altri cambiamenti
leo72:
Sembra un bug noto ma, fortunatamente, anche già risolto:
...
Si Leo, difatti scrivevo :
gpb01:
Facendo delle ricerche ho scoperto che il problema è dato da un buco presente nel linker che arriva con l'IDE di Arduino.
... solo che NON avevo trovato nessuna indicazione per gli utenti del forum Italiano mentre avevo trovato da altre parti le indicazioni per una possibile soluzione (... ma non avevo trovato quelli che indichi XD) ... eppure c'è parecchia gente anche qui che si diverte con gli ATtiny ...
leo72:
Leggendo in uno dei 2 link parrebbe un bug presente solo su Mac, forse chi ha "giocato" con i Tiny qui ha Windows/Linux.
... bé, ad esempio, se a te non è mai capitato ... potrebbe essere già un indicazione.
Hai programmi per il Tiny85 che superano i 4 KB ? Se SI, già potremmo essere quasi certi che su Linux (dove tu lavori) la cosa non si presenta ...
Ti faccio invece una domanda OT : il core "arduino-tiny-0100-0017" scaricabile da QUI è il più aggiornato ed è quello che tu consigli ? O c'è qualche cosa di più completo ? Grazie XD
leo72:
Ho uno sketch per Attiny84 che arriva a 4188 bytes:
...
Siamo proprio proprio al limite ...
... puoi fare una semplice prova ? Se e quando hai tempo, prendi una funzione e aggiungici un po' di istruzioni ... che so io ... analogWrite o simili .... tanto per creare codice e vedi se, arrivato a 5K, continua a non darti problemi ... così abbiamo una conferma
... così almeno sappiamo che il problema è circoscritto ad un determinato ambiente (... sarebbe carino capire il perché ... ma lasciamo stare XD XD XD).
Probabilmente su Linux e Win hanno già corretto il buco mentre sulla versione Mac non lo hanno fatto
Piuttosto ... sicuri che parliamo della versione di "ld" che arriva con la distribuzione ufficiale ??? Perché ti conosco ... tu hai le TUE distribuzioni ... ]
leo72:
Sì, ho compilato con la toolchain Atmel, non con quella di Arduino.
Se vuoi domani rifaccio la prova con la toolchain contenuta nell'IDE.
XD XD XD XD ... sei terribile ... così falsi tutte le prove !!!
Allora, ho provato io ...
... su Win7 x64 con l'IDE 1.05 ... da esattamente lo stesso errore
... su Ubuntu x64 sempre con IDE 1.05 ... non mi da alcun errore
Non ho installata la versione a 32 bit di Ubuntu per cui, purtroppo, non posso provare con l'ambiente a 32 bit ...
Quindi, almeno su Win, abbiamo la stessa condizione che su OS X e, per risolvere, occorre sostituire il linker (ld.exe) con una versione più aggiornata
Guglielmo
Edit : Provato anche su Ubuntu x32 ... nessun problema, quindi ... su Linux e con l'IDE 1.05 NON ci sono problemi. I problemi sono su OS X e su Win.
Nessun errore. Usata la toolchain Arduino su Arch Linux a 32 bit.
Nessun errore e circa lo stesso codice in byte compilando per Attiny85.
Se può aiutare, questo è avr-ld presente nell'IDE:
[leo@desktop-hp bin]$ ./avr-ld --version
GNU ld (GNU Binutils) 2.18 (WinAVR 20080610)
Copyright 2007 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
Questo è avr-ld presente nella toolchain Atmel:
[leo@desktop-hp bin]$ ./avr-ld --version
GNU ld (AVR_8_bit_GNU_Toolchain_3.4.2_939) 2.23.1
Copyright 2012 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.