Error al poner CADENA de String en PROGMEM

Alguien me puede indicar?

Defino el programa como sigue:

const char objeto [] PROGMEM = ".O0000F" ;
byte cas  = 0x00   ;

void setup() {}

void loop() {
  cas = objeto[pu_cha]                  ;
  Serial.println ( pu_cha, HEX )     ;  RESULTADO DEL PRINT  00H
  Serial.println ( cas, HEX )            ;  RESULTADO DEL PRINT  00H  (Deberia ser 2EH)
  Serial.println ( objeto [0], HEX ) ;  RESULTADO DEL PRINT 2EH

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Si pongo el string en RAM funciona correctamente

const char objeto [] = ".O0000F" ;
byte cas  = 0x00  ; 

void setup() {}

void loop() {
  cas = objeto[pu_cha]                  ;
  Serial.println ( pu_cha, HEX )     ;  RESULTADO DEL PRINT  00H
  Serial.println ( cas, HEX )            ;  RESULTADO DEL PRINT  2EH 
  Serial.println ( objeto [0], HEX ) ;  RESULTADO DEL PRINT 2EH

Donde tengo el error?

cas = pgm_read_byte(&objeto[pu_cha]);
  

Saludos

Muchas gracias por la rápida respuesta Maximo.

Veo que es una función para acceder a la memoria de programa que soluciona el problema.

Pero por saber, que indica el signo & o porque se pone?

Gracias de nuevo

El operador "*" se utiliza como puntero a una variable.

El operador & se utiliza para obtener la dirección de la variable.

Te aconsejo leer sobre punteros si quieres profundizar en el tema.

Gracias de nuevo Maximo

Sorry, ha sido un lapsus, quizá por la hora. Ese operador lo había hecho servir mucho hace meses para leer los registros del ESP32.

Otra cosa, no se donde comentaros que cuando utilizas aprox. mas del 90% de variables, compila bien, pero se desmadra la comunicación por el puerto serie.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.