March Madness - Hex Dump |
In continuation of yesterday's theme of investigating the properites of the Arduino. Todays program dumps memory in hex. I want to learn more about the AVR environment beyond the Arduino environment. Looking at memory, while not very helpful by itself, can help alot when trying to understand how the Atmel CPU works.
Dump HEX 0000 - 0C 94 35 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..5...]...]...]. 0010 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...]. 0020 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...]. 0030 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...]. 0040 - 0C 94 06 07 0C 94 5D 00 0C 94 0F 04 0C 94 5D 00 ......].......]. 0050 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...]. 0060 - 0C 94 5D 00 0C 94 5D 00 94 05 11 24 1F BE CF EF ..]...]....$.... 0070 - D8 E0 DE BF CD BF 11 E0 A0 E0 B1 E0 E4 E9 F0 E1 ................ 0080 - 02 C0 05 90 0D 92 A2 32 B1 07 D9 F7 11 E0 A2 E2 .......2........ 0090 - B1 E0 01 C0 1D 92 A6 3C B1 07 E1 F7 10 E0 CA E6 .......<........ 00A0 - D0 E0 04 C0 22 97 FE 01 0E 94 0D 08 C8 36 D1 07 ...."........6.. 00B0 - C9 F7 0E 94 CE 05 0C 94 48 08 0C 94 00 00 AE E0 ........H....... 00C0 - B0 E0 E5 E6 F0 E0 0C 94 1F 08 0D 89 1E 89 86 E0 ................ 00D0 - 8C 83 1A 83 09 83 8F EF 9F E7 9E 83 8D 83 9E 01 ................ 00E0 - 27 5E 3F 4F CE 01 01 96 6F 89 78 8D A9 01 0E 94 '^?O....o.x..... 00F0 - 83 00 2F 81 38 85 02 0F 13 1F F8 01 10 82 2E 96 ../.8........... |
|
//************************************************************************ //* Arduino hex dump //* (C) 2010 by Mark Sproul //* Open source as per standard Arduino code //* this program dumps Arduino memory in hex. //************************************************************************ #include "HardwareSerial.h" #include <avr/pgmspace.h> unsigned long gAddressPtr; //************************************************************************ static void DumpHex(unsigned long startAddress) { int ii; int theValue; int lineCount; char textString[16]; char asciiDump[24]; unsigned long myAddressPointer; lineCount = 0; myAddressPointer = startAddress; while (lineCount < 16) { sprintf(textString, "%04X - ", myAddressPointer); Serial.print(textString); asciiDump[0] = 0; for (ii=0; ii<16; ii++) { theValue = pgm_read_byte_near(myAddressPointer); sprintf(textString, "%02X ", theValue); Serial.print(textString); if ((theValue >= 0x20) && (theValue < 0x7f)) { asciiDump[ii % 16] = theValue; } else { asciiDump[ii % 16] = '.'; } myAddressPointer++; } asciiDump[16] = 0; Serial.println(asciiDump); lineCount++; } } //************************************************************************ void setup() { Serial.begin(9600); Serial.println(); Serial.println("Dump HEX"); gAddressPtr = 0; } //************************************************************************ void loop() { DumpHex(gAddressPtr); gAddressPtr += 256; while (!Serial.available()) { //* wait } Serial.read(); } |