Pages: [1]   Go Down
Author Topic: progmem  (Read 626 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sto usando esempio qui seguente per scrivere
 
Code:
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:
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 smiley

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 smiley-grin
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

« Last Edit: January 24, 2013, 02:51:58 pm by alessanddrob » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20275
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

È 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
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lo sto provando sia con gli indici fissi,

 punto a
Code:
[0] [0] sia a [i] [j] con un incremento di j++
se punto a
Code:
[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 smiley-grin
non vorrei che.......devo, una volta estratti i valori li devo convertire in qualche modo

ancora una cosa

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

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

byeee
« Last Edit: January 25, 2013, 09:23:58 am by alessanddrob » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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' smiley-grin
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21650
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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' smiley-grin

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


Pages: [1]   Go Up
Jump to: