Hi Everybody
To save SRAM i try to store constant data in the flash memory using PROGMEM.
Running the following sketch on my arduino mega the data set at position 47 shows random bytes when reading back. In my big project context the same happens, but on a different data set.
Any help or workarround is aprecciated
Best regads
// PROGMEM gets corrupted at dataset 47
// With Arduino IDE 1.8.7./Arduino Mega/Programmer AVRISP mkII
enum pinType {w,r,g,p1,p2,p3,p4,p5,donotcare};
const int N_edges = 89;
const int N_nodes = 74;
struct Element_Data{
const char* Name;
byte Sch_neighbor1;
pinType pin_neighbor1;
byte Sch_neighbor2;
pinType pin_neighbor2;
byte Sch_neighbor3;
pinType pin_neighbor3;
byte Sch_neighbor4;
pinType pin_neighbor4;
byte Sch_neighbor5;
pinType pin_neighbor5;
};
void PrintPinType(pinType startpin) {
switch (startpin) {
case w:
Serial.print("w");
break;
case r:
Serial.print("r");
break;
case g:
Serial.print("g");
break;
case p1:
Serial.print("p1");
break;
case p2:
Serial.print("p2");
break;
case p3:
Serial.print("p3");
break;
case p4:
Serial.print("p4");
break;
case p5:
Serial.print("p4");
break;
case donotcare:
Serial.print("donotcare");
break;
}
}
//topology in flash, size 17 x 164 = 2788 Bytes
const static Element_Data topology[N_edges+N_nodes+1] PROGMEM ={
{"noElem",0,donotcare,0,donotcare,0,donotcare},
{"A:A2", 53, p2, 10, w}, //1
{"A:A4", 7, g, 10, r},
{"A:A5", 7, r, 11, r},
{"A:A6", 8, r, 12, r},
{"A:A7", 9, r, 12, g}, //5
{"A:A9", 45, w, 9, w},
{"A:Wk1", 8, g, 3, p1, 2, p1},
{"A:Wk2", 9, g, 4, p1, 7, w},
{"A:Wk3", 6, p2, 5, p1, 8, w},
{"A:Wu4", 1, p2, 2, p2, 11, w}, //10
{"A:Wu5", 10, g, 3, p2, 12, w},
{"A:Wu6", 11, g, 4, p2, 5, p2},
{"B:A2", 155, w, 22, w},
{"B:A4", 19, g, 22, r},
{"B:A5", 19, r, 23, r}, //15
{"B:A6", 20, r, 24, r},
{"B:A7", 21, r, 24, g},
{"B:A9", 148, w, 21, w},
{"B:Wk1", 20, g, 15, p1, 14, p1},
{"B:Wk2", 21, g, 16, p1, 19, w}, //20
{"B:Wk3", 18, p2, 17, p1, 20, w},
{"B:Wu4", 13, p2, 14, p2, 23, w},
{"B:Wu5", 22, g, 15, p2, 24, w},
{"B:Wu6", 23, g, 16, p2, 17, p2},
{"C:A1", 36, w, 120, w},
{"C:A2", 36, r, 37, w},
{"C:A4", 32, g, 37, r},
{"C:A5", 32, r, 38, r},
{"C:A6", 33, r, 39, r},
{"C:A7", 34, r, 40, r}, //30
{"C:A8", 35, r, 40, g},
{"C:Wk1", 33, g, 28, p1, 27, p1},
{"C:Wk2", 34, g, 29, p1, 32, w},
{"C:Wk3", 35, g, 30, p1, 33, w},
{"C:Wk4", 36, g, 31, p1, 34, w},
{"C:Wk5", 25, p1, 26, p1, 35, w},
{"C:Wu6", 26, p2, 27, p2, 38, w},
{"C:Wu7", 37, g, 28, p2, 39, w},
{"C:Wu8", 38, g, 29, p2, 40, w},
{"C:Wu9", 39, g, 30, p2, 31, p2}, //40
{"1:A1", 46, r, 47, r},
{"2:A3", 43, p2, 47, g},
{"2:A2", 46, g, 42, p1},
{"3:A2", 152, w, 55, w},
{"W21", 6, p1, 53, p1, 46, w},
{"W22", 45, g, 41, p1, 43, p1},
{"Wk2",3, 48, g, 41, p2, 42, p2},
{"Wk24", 50, p1, 54, p3, 47, w},
{"W25", 50, p2, 55, g, 163, p2},
{"Svd22", 48, w, 49, w}, //50
{"3:A2", 53, p4, 52, p1},
{"3:A4", 51, p2, 54, p2},
{"Wu31", 45, r, 1, p1, 67, p1, 51, p1},
{"Wu32", 70, p3, 52, p2, 48, r, 55, r},
{"W33", 44, p2, 54, p4, 49, r},
{"4:A1", 0, donotcare, 57, p1},
{"4:A2", 56, p2, 67, p2},
{"4:A4", 67, p4, 59, p1},
{"4:A5", 58, p2, 60, p1},
{"4:A6", 59, p2, 68, w}, //60
{"4:A8", 73, g, 0, donotcare},
{"451", 75, r, 71, r},
{"461", 74, r, 72, r},
{"471", 74, g, 73, r},
{"44", 70, p4, 71, w},
{"49", 116, p2, 75, w},
{"Wu41", 53, p3, 57, p2, 86, p1, 58, p1},
{"W42", 60, p2, 69, p2, 70, p2},
{"Wk43", 87, p3, 68, r, 70, p1, 88, p1},
{"Wu44", 69, p3, 68, g, 54, p1, 65, p1}, //70
{"W45", 65, p2, 62, p2, 72, w},
{"W46", 71, g, 63, p2, 73, w},
{"W47", 72, g, 64, p2, 61, p1},
{"W48", 75, g, 63, p1, 64, p1},
{"W49", 66, p2, 62, p1, 74, w},
{"5:A1", 0, donotcare, 86, p2},
{"5:A2", 86, p4, 78, p1},
{"5:A3", 77, p2, 79, p1},
{"5:A4", 78, p2, 87, p2},
{"5", 88, p4, 89, w}, //80
{"53", 82, p2, 88, p3},
{"531", 120, g, 81, p1},
{"5:A7", 119, p2, 90, g},
{"5:A8", 118, p2, 90, r},
{"5:A9", 117, p2, 89, r},
{"Wu51", 67, p3, 76, p2, 93, r, 77, p1},
{"Wu52", 95, p2, 79, p2, 69, p1, 88, p2},
{"Wu53", 69, p4, 87, p4, 81, p2, 80, p1},
{"W54", 80, p2, 85, p2, 90, w},
{"W55", 89, g, 84, p2, 83, p2}, //90
{"6", 93, w, 94, g},
{"6:A1", 0, donotcare, 93, g},
{"61", 91, p1, 86, p3, 92, p2},
{"62", 95, p1, 96, p2, 91, p2},
{"67", 94, w, 87, p1},
{"7", 0, donotcare, 94, r},
{"100", 0, donotcare, 110, w},
{"102", 109, r, 0, donotcare},
{"110", 0, donotcare, 111, g},
{"111", 0, donotcare, 111, r}, //100
{"112", 112, w, 124, p1},
{"10:A1", 108, r, 103, p1},
{"10:A2", 102, p2, 107, p3},
{"10:A3", 110, g, 105, p1},
{"10:A4", 104, p2, 107, p4},
{"10:A5", 107, p5, 0, donotcare},
{"103", 103, p2, 105, p2, 106, p1},
{"W101", 109, g, 102, p1, 112, r},
{"W102", 110, r, 98, p1, 108, w},
{"W103", 97, p2, 109, w, 104, p1}, //110
{"W111", 112, g, 100, p2, 99, p2},
{"W112", 101, p1, 108, g, 111, w},
{"12:A1", 122, w, 114, p1},
{"12:A2", 113, p2, 115, p1},
{"12:A3", 114, p2, 123, w},
{"12:A7", 125, g, 66, p1},
{"12:A8", 126, r, 85, p1},
{"12:A9", 127, r, 84, p1},
{"12:A10", 127, g, 83, p1},
{"W121", 25, p2, 122, r, 82, p1}, //120
{"W122", 137, p2, 122, g, 144, p1},
{"W123", 113, p1, 120, r, 121, r},
{"W124", 115, p2, 145, p3, 124, p2},
{"Wu125", 101, p2, 123, g, 146, r, 125, w},
{"W126", 124, p4, 126, w, 116, p1},
{"W127", 125, r, 117, p1, 127, w},
{"W128", 126, g, 118, p1, 119, p1},
{"140", 144, p4, 134, p1},
{"141", 0, donotcare, 140, r},
{"142", 0, donotcare, 140, g}, //130
{"143", 0, donotcare, 141, r},
{"144", 0, donotcare, 143, r},
{"145", 0, donotcare, 143, g},
{"146", 128, p2, 145, p2},
{"148", 147, w, 138, p1},
{"14:A1", 0, donotcare, 137, p1},
{"14:A2", 136, p2, 121, w},
{"14:A3", 135, p2, 139, p1},
{"14:A4", 138, p2, 0, donotcare},
{"W141", 141, g, 129, p2, 130, p2}, //140
{"W142", 142, g, 131, p2, 140, w},
{"W143", 144, p2, 143, w, 141, w},
{"W144", 142, r, 132, p2, 133, p2},
{"Wu145", 121, g, 142, w, 149, p3, 128, p1},
{"Wk146", 150, r, 134, p2, 123, r ,146, g},
{"W147", 147, r, 124, p3, 145, p4},
{"W148", 135, p1, 146, w, 151, p3},
{"W151", 18, p1, 156, p2, 149, p2},
{"Wk152", 157, r, 148, g, 144, p3, 153, p1},
{"W153", 151, p2, 145, p1, 154, p2}, //150
{"Wu154", 159, p2, 150, w, 147, g, 152, r},
{"W155", 44, p1, 151, p4, 161, p2},
{"15:A1", 149, p4, 154, p1},
{"15:A2", 153, p2, 150, g},
{"Wk161", 13, p1, 162, p1, 156, p1},
{"Wk162", 155, g, 148, r, 157, g, 160, p1},
{"W163", 158, p1, 149, p1, 156, p3},
{"16:A1", 157, w, 159, p1},
{"16", 158, p2, 151, p1},
{"17:A1", 156, p4, 161, p1}, //160
{"Svd172", 160, p2, 152, g},
{"18:A1", 155, r, 163, p1},
{"18:A2", 162, p2, 49, g}, //163
};
const char* GetName(byte schluessel){
return pgm_read_word(&topology[schluessel].Name);
}
void setup() {
Serial.begin(9600);
pinType aa;
// print topology
for (byte i = 0; i < N_edges+N_nodes+1; i++) {
Serial.print(i);Serial.print(" ");Serial.print( GetName(i));Serial.print(" ");
Serial.print( pgm_read_byte(&topology[i].Sch_neighbor1 ));Serial.print(" ");
aa = pgm_read_word(&topology[i].pin_neighbor1 );
PrintPinType(aa);Serial.print(" ");
Serial.print( pgm_read_byte(&topology[i].Sch_neighbor2 ));Serial.print(" ");
aa = pgm_read_word(&topology[i].pin_neighbor2 );
PrintPinType(aa);Serial.print(" ");
Serial.print( pgm_read_byte(&topology[i].Sch_neighbor3 ));Serial.print(" ");
aa = pgm_read_word(&topology[i].pin_neighbor3 );
PrintPinType(aa);Serial.print(" ");
Serial.print( pgm_read_byte(&topology[i].Sch_neighbor4 ));Serial.print(" ");
aa = pgm_read_word(&topology[i].pin_neighbor4 );
PrintPinType(aa);Serial.print(" ");
Serial.print( pgm_read_byte(&topology[i].Sch_neighbor5 ));Serial.print(" ");
aa = pgm_read_word(&topology[i].pin_neighbor5 );
PrintPinType(aa);Serial.println(" ");
}
}
void loop() {}