Ya hemos visto como leer un byte de los distintos tipos de memoria de la placa Arduino. Sabiendo leer un byte podemos recorriendo y mostrando todos los bytes entre dos direcciones para conseguir un volcado. Pero si queremos algo con «mejor aspecto» podemos usar la librería Dump .
Tenemos dos funciones, una devuelve un volcado de la SRAM y otra un volcado de la memoria flash.
Volcado de la SRAM: dumpRam(out, addr, size);
Volcado de la memoria flash: dumpPgm(out, addr, size);
Los parámetros que se les pasa son los siguientes:
- out: Serial al que enviar los datos
- addr: dirección en la que comenzar el volcado
- size: cantidad de bytes que se mostraran
Faltaría un volcado de la memoria EEPROM, por suerte es sencillo crear nuestra propia función fijándonos en el código de las que ya tiene:
unsigned char memByteEeprom(const void* x) {
return EEPROM[int(x)];
}
void dumpEeprom(Print& out, void const* at, int sz) {
return dump(out,at,sz,memByteEeprom);
}
Veamos un ejemplo completo de su uso:
#include <Dump.h>
#include <EEPROM.h>
const unsigned int* ramTest = (unsigned int*) 0x100;
const unsigned int* pgmTest = (unsigned int*) 0x100;
void setup() {
Serial.begin(9600);
while(!Serial);
Serial.println("Dump SRAM");
dumpRam(Serial,ramTest,64);
Serial.println("Dump Flash");
dumpPgm(Serial,pgmTest,64);
Serial.println("Dump EEPROM");
dumpEeprom(Serial,0,64);
}
void loop(){}
unsigned char memByteEeprom(const void* x) {
return EEPROM[int(x)];
}
void dumpEeprom(Print& out, void const* at, int sz) {
return dump(out,at,sz,memByteEeprom);
}
La salida obtenida:
Dump SRAM 0x0100: ......e. ..R..... 00 00 00 00 05 01 65 00 92 00 52 01 C3 00 A1 00 0x0110: .....000 .0x.: .D B5 00 0D 0A 00 30 30 30 00 30 78 00 3A 20 00 44 0x0120: ump SRAM .Dump Fl 75 6D 70 20 53 52 41 4D 00 44 75 6D 70 20 46 6C 0x0130: ash.Dump EEPROM. 61 73 68 00 44 75 6D 70 20 45 45 50 52 4F 4D 00 Dump Flash 0x0100: ...-.... .+y..... F0 81 E0 2D C6 01 09 95 89 2B 79 F7 C5 01 DF 91 0x0110: ........ ........ CF 91 1F 91 0F 91 FF 90 EF 90 DF 90 CF 90 BF 90 0x0120: ......S. D.%/0../ AF 90 08 95 FC 01 53 8D 44 8D 25 2F 30 E0 84 2F 0x0130: ......T. ........ 90 E0 82 1B 93 0B 54 17 10 F0 CF 96 08 95 01 97 Dump EEPROM 0x0000: ........ ...._... A3 00 BE BF BF 00 00 00 00 00 36 00 5F 00 0E 00 0x0010: ...... . ..J.0... 00 00 00 00 01 00 20 08 18 00 4A 01 30 00 1E 00 0x0020: ........ ........ B8 B8 B8 1F 00 00 02 00 00 01 00 00 B8 B8 B8 B8 0x0030: ....5... ........ B8 B8 B8 B8 B8 06 07 07 B8 B8 B8 00 00 00 00 00
Este texto mejorado y ampliado forma parte de mi libro sobre como mejorar tus programas en Arduino. Puedes echarle un vistazo aquí.
Tienes el vídeo donde explico este post en mi canal de Youtube: