TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: JCAK en 09 de Diciembre de 2010, 00:26:05
-
Hola amigos ...
Tengo el siguiente codigo y el siguiente problema:
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.
"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
-
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:
SPI_MasterTransmit(pgm_read_byte(&array_01[n]));
Saludos,
Miguel.
-
Hola, el compilador no se da cuenta que el array esta en Flash ??? no podria llamar automaticamente a esta función ?
Saludos !
-
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)
-
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:
SPI_MasterTransmit(pgm_read_byte(&array_01[n]));
Saludos,
Miguel.