Probabile errore Reference EEPROM

Salve, sto guardando sulla reference le funzioni per scrivere sulla Eeprom interna e ho trovato (forse) un errore

Parameters
address: the location to write to, starting from 0 (int)
value: the value to write, from 0 to 255 (byte)

poi sotto c’è un esempio che riporto:

Example
#include <EEPROM.h>
void setup()
{
for (int i = 0; i < 512; i++)
EEPROM.write(i, i);
}

In pratica sopra dice che può scrivere valori al massimo da 0 a 255 visto che si tratta di byte ma nell’esempio scrive anche valori fino a 512…
E’ un errore o posso scrivere anche valori più grandi di 255?
Non posso fare prove adesso perchè non ho arduino sotto mano.
Saluti

è un errore, i valori si possono scrivere da 0 a 255 (2^8=256 -1 per lo 0)

Che bello, ho trovato un errore! Hovvintoqualcheccoosa? :) A sto punto mi chiedo... ma le reference non le consulta nessuno?

io spessissimo, ma non ho mai usato la eeprom.

comunque nella pratica lo sketch funziona, solo che se rileggi la eeeprom arrivato a 255 ricominci da 0 anziché andare avanti fino a 512

Comunque da poco hanno aggiornato il testo mettendo la grandeza delle EEprom nei diversi modelli dei ATmega. Prima parlava solo dei 512 Byte del ATmega168. Ciao Uwe

Beh non è proprio un errore... la EEPROM memorizza valori di 1 byte, e quando il valore dato in ingresso a EEPROM.write supera 255 viene semplicemente fatto un cast e vengono memorizzati solo gli 8bit meno significativi. È l'architettura del linguaggio... Ciao

Hai ragione che non é proprio un errore ma induce a far credere che si possano memorizzare dei numeri da 0 fino a 512. Per un principiante che interpreta in questo modo é fatale. Ciao Uwe

Purtroppo è una semplificazione.
Se osservate bene il codice, l’autore ha usato il casting per far ripartire da 0 il valore da salvare nella cella senza usare 2 indici.
Per chiarezza avrebbe dovuto usare un codice simile al seguente:

int value=0;
int i;
    for (int i = 0; i < 512; i++) {
        EEPROM.write(i, value);
        value++;
        if (value>255) { value=0; }
    }
}

Scrivendolo come l’ha scritto l’autore, ha risparmiato una variabile, rendendo però il codice meno leggibile da parte di un novellino.

io lo considererei un errore visto che gli esempi nel reference sono pensati per i novellini

do ragione a lesto.
Comunque si puó fare anche senza seconda variabile facendo:
un AND logicio con 255
di mettere il modulo di 256

int i;
    for (int i = 0; i < 512; i++) {
        EEPROM.write(i, (i & 255));
        }

oppure:

int i;
    for (int i = 0; i < 512; i++) {
        EEPROM.write(i, (i%256));
        }

Ciao Uwe

Non sono d’accordo, non è considerabile come errore: sintatticamente non lo è. E’ una “finezza” lessicale lecita in C.
Altrimenti, secondo me, visto che comunque la memoria EEPROM di un 328 è di 1024 byte e quindi non ha più senso lasciare quell’esempio lì che sfrutta “tutti” i 512 byte, basterebbe modificare l’esempio originale mettendo:

for (int i = 0; i < 256; i++) {
    EEPROM.write(i, i);
}

In questa maniera si taglia la testa al toro e si mette un esempio chiaro per tutti e sintatticamente corretto.