Arduino. Leer datos de la memoria RAM, flash y EEPROM

Vamos a ver como leer un byte de cada uno de los tres tipos de memoria que tiene una placa Arduino.

Leer un byte de la memoria flash

Podemos usar la función (realmente es una macro) pgm_read_byte(addr) que devuelve el byte de la dirección addr (una dirección de 16 bits más que suficiente para los 32 KB de memoria FLASH de la placa Arduino UNO).

Serial.print(pgm_read_byte(addr));

Leer un byte de la memoria EEPROM

Para leer la EEPROM podemos usar el el array EEPROM[addr] siendo addr la dirección del byte de memoria a leer. Para acceder a este array hay que incluir la librería EEPROM.h

#include <EEPROM.h>

...

Serial.print(EEPROM[addr])

Leer un byte de la memoria RAM

En este casos recurriremos a crear un puntero y apuntarlo a la dirección de memoria que queramos.

Asignando la dirección de memoria directamente:

const byte* ramPtr = (const byte*) 0x100; 

Usando una variable que almacena la dirección de memoria:

unsigned int address = 0x100;
const byte* ramPtr = (const byte*) address;

Para mostrarlo:

Serial.print(*ramPtr, HEX);

Este texto mejorado y ampliado forma parte de mi libro sobre como mejorar tus programas en Arduino. Puedes echarle un vistazo aquí.

También puedes ver un vídeo en el que trato de explicar el como funciona todo esto con ejemplos:

Haz clic para ver el vídeo en mi canal de Youtube.