Newsgroup: it.hobby.elettronica.digitale
Titolo: Traumatico

Salve a tutti, sottopongo i miei primi giorni traumatici dopo essere passato 
da IAR a GCC su AtmelStudio6. Indirizzare i singoli bit delle porte e' un 
vero problema. Prima bastava: LEDDX = 1 ora si deve fare bit_set(porta, 
posizione) oppure peggio: TCCR0B &= ~_BV(CS02) insomma una bella perdita di 
tempo e di logica senza contare la leggibilita' del codice. Qualcuno ha 
degli header capaci di rendere la cosa piu' facile o bisogna passare per 
queste forche caudine?
Grazie per l'attenzione
G
 
 


uh?
Se con IAR utilizzavi la normale sintassi (che tra l'altro personalmente 
ritengo piï¿œ leggibile) non avevi alcuna difficoltï¿œ a migrare verso un 
altro compilatore, e probabilmente potevi "portare" buona parte del tuo 
codice :)
 
Perdita di tempo per scrivere il nome del registro e il bit che vuoi 
modificare? Vorrai almeno dire al compilatore cosa vuoi fare!
 
Perdita di logica? Non ti seguo...
 
Ti consiglio di rifletterci senza pregiudizi. Gli "header" che dici tu 
sono proprio quelli che ti offrono la macro bit_set (che tra l'altro non 
mi pare sia definita di default nell'avr gcc). Puoi utilizzare queste 
macro oppure la versione "esplicita":
 
register |= (1 << bit); 	// set bit
register &= ~(1 << bit); 	// clear bit
register ^= (1 << bit); 	// toggle bit
register & (1 << bit); 		// test bit
 
o come giï¿œ hai individuato anche la macro _BV.
Infine, con questa notazione puoi facilmente modificare lo stato di piï¿œ 
bit assieme:
 
register |= _BV(bit1) | _BV(bit3) | _BV(bit4);
 
 
Ciao!
Marco
 


 
Ciao e grazie per la risposta!!
In questi giorni sto praticamente rimettendo mano al corposo codice per il
porting.
Allora cerco di spiegarmi meglio
Non so se hai programmato con IAR ma mi sembra di capire di si, comunque
avri certamente visto che esistono delle union negli header che ti
permettono di usare in maniera agilissima le assegnazioni a bit; di
conoscere solo il nome del bit e poterlo variare semplicemente mettendo =1 o
=0 senza conoscere il nome del registro, etc.
Forse mi sono abituato bene ma francamente credo sia di una "scorrevolezza"
disarmante.
Non hai bisogno di sapere il nome del registro, di macro (_BV) e poi il
codice e' molto piu' leggibile credo che questo sia indiscutibile.
Se mi dici poi che "semplicemente" scrivendo
 
register |= (1 << bit); // set bit
register &= ~(1 << bit); // clear bit
register ^= (1 << bit); // toggle bit
register & (1 << bit); // test bit
 
ottengo le stesse funzioni questo ok va bene e' perfetto
ma vuoi mettere
OCIE1 = 0; ? (il punto interrog e' per la domanda :-))
leggibilita' massima! Senza sapere come si chiama il registro!
 
Da come mi sembra di capire, e' un problema di abitudine.
Ma e' proprio non seguendo le abitudini che si migliorano le cose
 
Comunque sto cercando di costruire degli header per ottenere questo,
sbirciando un po' in quelli di IAR
Molto interessanti (e molto didattici)!
 
Salute a tutti
 
G 
 
 

 Molto interessanti (e molto didattici)!
 
 
Puoi farlo, se cerchi trovi degli spunti e delle discussioni con 
conclusioni simili:
 
http://lists.gnu.org/archive/html/avr-gcc-list/2006-11/msg00051.html
 
 
Ciao!
Marco
 
 


Ti ringrazio per le tue opinioni
Al momento pero' per il mio punto di vista non sono convincenti anzi un po' 
stiracchiate
Dire che in programmazione una espressione complicata e' piu' immediata e 
leggibile di una semplicissima mi sembra quanto meno strano.
Non credevo potesse essere non condivisibile.
E' come dire che in assembler e' piu' leggibile (o meno orientato agli 
errori) del C perche' vedo esattamente quello che succede con tutti i 
passaggi.
O in linguaggio macchina e' piu' leggibile (o meno orientato agli errori) 
del Pascal  perche' vedo esattamente le istruzioni che agiscono sui vari 
registri
Naturalmente questa e' una esagerazione ma l'ho fatto con l'unico scopo di 
esprimere pienamente il mio pensiero.
 
 
Comunque non voglio fare polemica assolutamente!
LUNGI DA ME!!
Sono solo opinioni poi ognuno segue la sua strada.
Io assolutamente quella della semplicita' e linearita'
 
Solo una riflessione non riferita a questo soggetto
chi decide se le abitudini sono cattive? certamente non quello che le segue
 
Comunque ti ringrazio ancora anche per il riferimento che leggero' con 
attenzione
 
Saluti
G
 
 
 
 
 
 

 attenzione
 
 
A presto
Marco