TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: JCAK en 09 de Diciembre de 2010, 00:26:05

Título: problema al leer un array
Publicado por: JCAK en 09 de Diciembre de 2010, 00:26:05
Hola amigos ...

Tengo el siguiente codigo y el siguiente problema:

Código: [Seleccionar]
const prog_uint8_t PROGMEM array_01[5] = {
0b10000100,
0b10010001,
0b10000001,
0b10010100,
0b10010000,
};

int main(void) {
uint8_t n;

while(1)//loop
{
n = 0;
while(n < 5)
{
SPI_MasterTransmit(array_01[1]); //Escribe el pixel
_delay_ms(100);
n = n + 1;
}
}
}

Ahora el problema es que si en lugar de manejar un valor fijo lo cambio por una variable, el resultado que obtendo es un valor cualquiera que no corresponde al array declarado.

Código: [Seleccionar]
"SPI_MasterTransmit(array_01[1]);" //Con un valor fijo funciona bien
"SPI_MasterTransmit(array_01[n]);" //Con una variable toma un valor cualquiera que no corresponde a nada declarado.


¿que es lo que está mal?
Alguien me sabe decir

Gracias y saludos
Título: Re: problema al leer un array
Publicado por: ma4826 en 09 de Diciembre de 2010, 10:52:01
 Estas accediendo a un array almacenado en la flash, no puedes acceder a el directamente tienes que usar las funciones que proporciona "pgmspace.h" .

 Así debería funcionar:
 
Código: [Seleccionar]
SPI_MasterTransmit(pgm_read_byte(&array_01[n]));
 Saludos,

 Miguel.

Título: Re: problema al leer un array
Publicado por: RICHI777 en 09 de Diciembre de 2010, 14:14:00
Hola, el compilador no se da cuenta que el array esta en Flash ??? no podria llamar automaticamente a esta función ?

Saludos !
Título: Re: problema al leer un array
Publicado por: jonathanPIC888 en 09 de Diciembre de 2010, 20:45:40
Acá te dejo un hilo donde se trató este tema espero que te ayude: PGMSPACE (http://www.todopic.com.ar/foros/index.php?topic=32257.0)
Título: Re: problema al leer un array
Publicado por: JCAK en 11 de Diciembre de 2010, 00:03:33

MUCHAS GRACIAS MIGUEL (ma4826), es correcto como vos decis y me fue de gran ayuda. GRACIAS


Estas accediendo a un array almacenado en la flash, no puedes acceder a el directamente tienes que usar las funciones que proporciona "pgmspace.h" .

 Así debería funcionar:
 
Código: [Seleccionar]
SPI_MasterTransmit(pgm_read_byte(&array_01[n]));
 Saludos,

 Miguel.