Atmega vs attiny

Ciao ragazzi. Ma ci sono differenze di "potenza elaborativa" tra atmega328 e attiny85 ovviamente a parità di clock?

Grazie

erpomata: Ma ci sono differenze di "potenza elaborativa" tra atmega328 e attiny85 ovviamente a parità di clock?

Si, gli ATmega 328 possono essere più performanti a parità di clock e di sorgente.

ok grazie

Astro da cosa deriva questa differenza ?

C'è un concetto di istruzioni macchina integrate ? Tipo i moderni processori che integrano sempre più iztruzzioni a livello ha ?

Thanks

Testato: Astro da cosa deriva questa differenza ?

Dal fatto che il core dei 328 è diverso, anche se di poco, da quello dei Tiny.

e per core si intende una accozzaglia di transistor o c'e' il concetto di istruzioni anche sui micro? Non so se mi sono spiegato, intendo ad esempio il fatto che il Pentium MMX aveva aveva piu' istruzioni integrate del pentium, il Pentium 2 ancora di piu' ecc.

per quanto mi ricordo il pentium mmx aveva un set di istruzioni multimediali integrate, rispetto al pentium 1, mentre il pentium 2 era proprio tutt'altro tipo di processore, molto più prestante.

Testato: e per core si intende una accozzaglia di transistor o c'e' il concetto di istruzioni anche sui micro?

Se ti leggi le prime righe del datasheet dei due micro la prima cosa che salta all'occhio è che il 328 possiede 131 istruzioni assembly, il Tiny (24/45/85) 120.

Bella, questa cosa la devo studiare, grazie Immagino quindi che una funzione di Arduino che si basa su una di queste istruzioni in più sul tiny non funziona, e la si deve riscrivere per farla funzionare via sw. Mica ricordi al volo uno di questi casi ? Grazie

Secondo me non è questione di codice C ma di compilatore che "traduce" il codice in base al set di istruzioni disponibili. ( a meno che non si programmi in Assembler) A livello di codice ci si dovrebbe differenziare solo per le chiamate ai registri e alle periferiche interne al micro.

PaoloP: Secondo me non è questione di codice C ma di compilatore che "traduce" il codice in base al set di istruzioni disponibili.

Esatto, il C non sa quali sono le istruzioni assembly a disposizione, questa è una cosa che riguarda esclusivamente il compilatore.

La più grossa lacuna dei core Tiny rispetto ai core Mega è l'assenza della moltiplicazione in HW, presente in questi ultimi.

Quindi se ho capito in C io faccio 2*3 indifferentemente se uso mega o tiny, però compilando per mega andrò a richiamare la apposita istruzione di moltiplicazione, mentre compilando per Tiny andrò a fare 2+2+2 ?

LA inefficienza della cosa si traduce nella necessità di usare due cicli macchina per la somma ed uno per la moltiplicazione ? (Ecco ora mi spiegano anche cosa è un ciclo macchina, due piccioni con una fava, prometto karma per tutti :) )

Testato: Quindi se ho capito in C io faccio 2*3 indifferentemente se uso mega o tiny, però compilando per mega andrò a richiamare la apposita istruzione di moltiplicazione, mentre compilando per Tiny andrò a fare 2+2+2 ?

Più o meno si, nel caso il micro dispone di moltiplicatore hardware e il calcolo è nei limiti previsti (numeri da 8 bit con risultato a 16 bit) servono solo due cicli macchina, se non c'è il moltiplicatore hardware, o i numeri da moltiplicare sono più grossi di 8 bit, il calcolo viene eseguito a software tramite un apposito algoritmo (A * B non viene fatta B volte la somma A con A) che richiede molti più cicli macchina. Uno dei motivi per cui si sconsiglia sempre di usare i float, quando possibile, con le piccole mcu a 8 bit è proprio l'elevato numero di cicli macchina necessari per fare anche una semplice somma con questo tipo di dati.

Testato: (Ecco ora mi spiegano anche cosa è un ciclo macchina, due piccioni con una fava, prometto karma per tutti :) )

Il ciclo macchina è la singola operazione elementare che viene eseguita dalla cpu, la sua durata è stabilita dal clock di sistema che viene ottenuto partendo dalla frequenza del quarzo alla quale possono essere applicati dei divisori/moltiplicatori a seconda di come è fatto il sistema interno di clock del micro e di come questo viene settato a software, cambiare a run time la frequenza di lavoro del micro è una tecnica usuale per risparmiare energia quando non serve tutta la potenza di calcolo. Se guardi l'elenco del set istruzioni assembly vedrai che per ciascuna è indicato quanto cicli macchina sono necessari, le più semplici, p.e. la somma tra due registri, richiedono un solo ciclo macchina, quelle un pochino più complesse, p.e. la moltiplicazione hardware, due cicli macchina fino ad arrivare a 3-4 cicli macchina per le istruzioni che devono fare molte cose, p.e. la chiamata a subroutine e la return da interrupt richiedono 4 cicli macchina, poi ci sono istruzioni, come quelle di confronto, che possono richiedere 1/2/3 cicli macchina a seconda del risultato.

grazie mille, ora approfondisco con il datasheet.
promessa karma mantenuta :slight_smile: