#include "Arduino.h"
// nested arrays of integers to add code size for testing
#define A0 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15} // 16 elements 64
#define A1 {A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0,A0} // 256 elements 1KB
#define A2 {A1,A1,A1,A1,A1,A1,A1,A1,A1,A1,A1,A1,A1,A1,A1,A1} // 4K elements 16KB
#define A3 {A2,A2,A2,A2,A2,A2,A2,A2,A2,A2,A2,A2,A2,A2,A2,A2} // 64K elements 256KB
#define A4 {A3,A3,A3,A3,A3,A3,A3,A3,A3,A3,A3,A3,A3,A3,A3,A3} // 1M elements 4MB
// const variables reside in flash and get optimized out if never accessed
PROGMEM const uint32_t a[16][16][16][16][16] = A4;
elapsedMicros usec;
uint32_t count;
void setup()
{
while (!Serial) {} // wait for Serial
usec = 0; // init usec timer
}
void loop()
{
if (usec > 1000) { // every 1 ms
int i = count % 16;
uint32_t *address = (uint32_t*)&a[i][i][i][i][i];
uint32_t value = *address;
Serial.printf("%8lu %08X %1lu\n", count, (uint32_t)address, value );
count++;
usec -= 1000;
}
}