Go Down

Topic: progmem (Read 936 times) previous topic - next topic

Jan 24, 2013, 08:49 pm Last Edit: Jan 24, 2013, 08:51 pm by alessanddrob Reason: 1
sto usando esempio qui seguente per scrivere

Code: [Select]
void scrivi_progmem(){


 unsigned char mydata[11][10] PROGMEM =
{
       {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09},
       {0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13},
       {0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D},
       {0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27},
       {0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31},
       {0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B},
       {0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45},
       {0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F},
       {0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59},
       {0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63},
       {0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D}
};


e questo per leggere i dati memorizzati

Code: [Select]
variabileletta=pgm_read_byte (&(mydata [1] [j])));

se ho capito scrivo nella matrice i valori da 00 a 6d
il tutto sembra funzionare ma che cavolo dovrei leggere il valore in esadecimale o il valore intero contenuto nel byte
io leggo un numero che varia a secondo la posizione ma quando salgo di indice arrivo a leggere valori sopra 110 che non ci sono :)

le matrici iniziano da zero ?
unsigned char mydata[11][10] PROGMEM  è una matrice 11*10
ma se inizia da 0 sta matrice ha qualcosa che non va' :)o sono io che non vado :D
forse la dimensione è 11*10
ma conto da 0 fino a 10 e da 0 fino a 9

PS mi faccio sparare tutto sul serialprint

grazie


uwefed

È fisiologico
C non Ti controlla l' indice di un array. Puoi scrivere o leggere senza segnalazione fuori dalla definizione del Array. Leggerai o scriverai il contenuto delle celle di memoria sucessive alla memoria dove é memorizzato l'array.
Questo é uno dei errori come sintomi meno prevedibile e piú disperato che c'é.
Devi Tu stare attento di non sforare l' array.
Ciao Uwe

leo72


le matrici iniziano da zero ?


Sì, in C le matrici iniziano da zero per cui una matrice 11*10 la devi leggere con gli indici da 0 a 10 e da 0 a 9, rispettivamente per la prima e la seconda dimensione.

ok
ma cosa dovrei leggere nel mio caso perche' non leggo i valori che scrivo da  0x00 a  0x6D
leggo valori non congrui a quelli contenuti nella matrice 
esempio 224 che non ce anche se fosse convertito in decimale al massimo 0x6D=109
adesso riprovo a mente fresca e mi segno tutto
grazie

leo72

L'errore credo sia qui:
variabileletta=pgm_read_byte (&(mydata [1] [j])));
hai messo "1", non la variabile "i".

#5
Jan 25, 2013, 03:19 pm Last Edit: Jan 25, 2013, 03:23 pm by alessanddrob Reason: 1
lo sto provando sia con gli indici fissi,

punto a
Code: [Select]
[0] [0] sia a [i] [j] con un incremento di j++

  • se punto a
    Code: [Select]
    [0] [0]  o [i] [j] settando le variabili a 0
    leggo sempre dei valori sempre gli stessi
    se mi muovo dentro la matrice  leggo sempre le stesse cose sia in un modo che in un altro
    una qualche coerenza cè ma non ne vedo quale :D
    non vorrei che.......devo, una volta estratti i valori li devo convertire in qualche modo

    ancora una cosa

    Code: [Select]
    pgm_read_byte (&(mydata [0] [0])));

    la & davanti mydata che cosa fa? se la tolgo mi legge sempre 13

    byeee

leo72


non vorrei che.......devo, una volta estratti i valori li devo convertire in qualche modo
byeee

Uhm... no, in teoria no.
Anteponi la parola chiave const sul tipo di dati della matrice:

const unsigned byte myDataecc...

fatto ma sempre uguale comunque i dati non variano se li leggo adesso o tra un ora o ieri sempre quelli sono
non è che ho valori a caso .....sempre le sesse cose leggo
grazie

leo72

Non so che sketch stai usando per cui vado anch'io a tentativi. Ad occhio pare tutto a posto.
Ti segnalo questa discussione:
http://arduino.cc/forum/index.php/topic,120603.0.html
si affronta il problema con diversi suggerimenti.

ho capito tutto
allora il problema era che io avevo una funzione che mi riempiva la matrice
ho fatto come nelle esempio e printavo sia una matrice normale che una in progmem e c'erano differenze, quella normale era ok l'altra no un casino
allora ho provato a mettere la matrice fuori e riempirla in fase di compilazione
e ora tutto ok
matrice e progmem corrispondono
grazie per ora ma sicuramente ricomincio a rompere tra un po' :D

leo72


ho capito tutto
allora il problema era che io avevo una funzione che mi riempiva la matrice
ho fatto come nelle esempio e printavo sia una matrice normale che una in progmem e c'erano differenze, quella normale era ok l'altra no un casino
allora ho provato a mettere la matrice fuori e riempirla in fase di compilazione
e ora tutto ok
matrice e progmem corrispondono
grazie per ora ma sicuramente ricomincio a rompere tra un po' :D


Te l'avevo detto che senza sketch si andava a tentativi... non potevi pubblicarlo prima?  :smiley-yell:

Go Up