So how can this 'solution' be implemented in context of writing and uploading sketches in the Arduino IDE?
Lefty
Copy 'n' paste.
You cannot address huge variables even in the < 64k boundary.
Here is a program using every single byte on the mega using progmem, it is possible, and GET_FAR_ADDRESS will help you read the data.
#define nothing
template< uint64_t C, typename T >
struct LargeStruct{
T Data;
LargeStruct< C - 1, T > Next;
};
template< typename T > struct LargeStruct< 0, T >{ };
typedef LargeStruct< 80, uint64_t > Container; //640 bytes
PROGMEM LargeStruct< 50, Container > l_Struct; //32k
PROGMEM LargeStruct< 50, Container > l_Struct1; //32k
PROGMEM LargeStruct< 50, Container > l_Struct2; //32k
PROGMEM LargeStruct< 50, Container > l_Struct3; //32k
PROGMEM LargeStruct< 50, Container > l_Struct4; //32k
PROGMEM LargeStruct< 50, Container > l_Struct5; //32k
PROGMEM LargeStruct< 50, Container > l_Struct6; //32k
PROGMEM LargeStruct< 50, Container > l_Struct7; //32k
PROGMEM LargeStruct< 431, uint16_t > l_Struct8; //862 bytes
void setup()
{
volatile int i = ( int ) &l_Struct;
volatile int i1 = ( int ) &l_Struct1;
volatile int i2 = ( int ) &l_Struct2;
volatile int i3 = ( int ) &l_Struct3;
volatile int i4 = ( int ) &l_Struct4;
volatile int i5 = ( int ) &l_Struct5;
volatile int i6 = ( int ) &l_Struct6;
volatile int i7 = ( int ) &l_Struct7;
volatile int i8 = ( int ) &l_Struct8;
}
void loop(){}