Hallo Rudolf,
da eben angedacht, hier ein Vorschlag zu einer Erweiterung von read_eeprom in fncollection.c um das Auslesen des kompletten EEPROMs.
#ifdef HAS_EEPROM_FULL_READ
else if(in[2] == 'N') { // requires IO transfer functions with waiting on full buffer (and flushing)
DC('R'); // prefix
DC('<'); // mark Start Full Read
for (addr = 0 ; addr <= E2END; addr++) { // Read all EEPROM bytes, or adapt to the End of the used EEPROM content
d = erb((uint8_t *)addr);
DH2(d); // display result, hex
}
DC('>'); // mark End Full Read
DH(addr, 4); // number of bytes sent
}
#endif // HAS_EEPROM_FULL_READ
Es gibt da nur den kleinen Pferdefuss des überlaufenden Sendepuffers. Das wäre in display.c zu korrigieren.
Alternativ könnte man auch ab einer mit übergebenen Addresse max. ((TTY_BUFSIZE-6)/2) (oder ((TTY_BUFSIZE - TTY_Tx_Buffer.nbytes - 10)/2) ) Bytes auslesen und mit Startadressangabe senden.
Aber dann kann man natürlich auch alle einzeln lesen.
Das macht aber eine Änderung bezüglich EEPROM Ende sinnvoll:
...
DC('R'); // prefix
DH(addr,4); // EEPROM address
DS_P( PSTR(" = ") );
if (addr > E2END) {
DC('-'); // don't read bejoynd End of EEPROM and signal it!
goto read_eeprom_EndNL;
}
d = erb((uint8_t *)addr);
DH2(d); // result, hex
DS_P( PSTR(" / ") );
DU(d,2); // result, decimal
read_eeprom_EndNL:
DNL();
}
Gruß, Ansgar.