Ja unsere Posts haben sich überschnitten, Lösung im Nachtrag letzter Post von mir Mittels "section".
Die geänderte Fassung welche sich nicht an der Linearadresse stört liefer ich noch nach. <-[erledigt]
hab noch nie einen Compiler automatisch Daten in ein EEPROM legen lassen - das mache ich per Hand.
Naja bisher war das auch schwierig wegen der Adressen die vom Bootloader überschrieben werden aber mit dem Wissen kriegst Du das jetzt auch hin 
Ok wenn man weiss das eeprom-Bytes vom Bootloader "verseucht" sind kann man natürlich einfach ein genulltes Array an den Anfang von EEMEM setzen und das Array eben im Programm einfach nicht nutzen. Du sagst ja das es im Prinzip dann aufs neu setzen der Werte vom Bootloader im eeprom hinaus läuft nachdem ein eep File geschrieben wurde. Das muss jeder selbst wissen aber mir gefällt die Lösung mit der Section ohne überschreiben der Bootloaderdaten besser.
In meinem Prozessor herrscht Ordnung! 
Gruß
NACHTRAG:
Was bei mir sehr gut klappt ist die Nutzung des EPP / PROGMEM über ein #define umschaltbar zu machen.
So ist zu Testzwecken das normale Flashmemory nutzbar und wenn man eine epp Version bauen will, reicht es die defines umzukommentieren.
Es erspart also die Notwendigkeit wärend der Entwicklung dauernd das epp-file hochladen zu müssen. (War als Kritikpunkt für epp ja angesprochen.)
Code:
// Speicherconfig: in der RP6CONTROLLIB.H einfügen
#define MEMORY 0 /*0=PROGMEM,1=EEPMEM,2=EEMEM*/
#if MEMORY==0
#define MEM PROGMEM
#elif MEMORY==1
#define EEPMEM __attribute__((section(".realeep")))
#define MEM EEPMEM
#elif MEMORY==2
#define MEM EEMEM
#endif
----3<---
// im Programm irgendwo nutzen...
const char lcd_wheelchar[] MEM = ".,oO0*0Oo,. "; // sinnvoll wäre auch noch const char wheel[] = "0123456789ABCDEF";
const uint8_t LCDLineAdr[] MEM = {LCD_START_LINE1, LCD_START_LINE2, LCD_START_LINE3, LCD_START_LINE4};
----3<---
//in der Init Funktion in RP6CONTROLLIB.C einfügen
UART_Mode(UART_INIT);
#if MEMORY!=0
#ifndef WENEEDASCII //// damit xon/off im Ascii mode meiner uartLib funktioniert auch wenn sie nicht configuriert ist
#define WENEEDASCII 1
#endif
#ifndef WENEEDTXXONOFF
#define WENEEDTXXONOFF 1
#endif
#ifndef WENEEDRXXONOFF
#define WENEEDRXXONOFF 1
#endif
#ifndef WENEED7BIT
#define WENEED7BIT 1
#endif
#ifndef WENEEDCRLF
#define WENEEDCRLF 1
#endif
UART_Mode(UART_ASCII);
puts_P(PSTR("load epp...[x]"));
if (import_epp()) puts_P(PSTR("ok")); else {
puts_P(PSTR("ERROR"));
while(1);
}
UART_Mode(UART_RP6);
#endif
----3<---
// in der import_epp() , liegt bei mir derzeit in der uartlib
while (true) {
c = getchar();
if (c=='x') return true; // <- die Zeile neu einfügen
switch(parser_state) {
----3<---
//verarbeiten kann man die Daten z.B. so
#if MEMORY==0
eeval = pgm_read_byte(&chrdata[i]);
#else
eeval = eeprom_read_byte(&chrdata[i]);
#endif
Man kann die import_epp() Funktion übrigends auch gut aus dem Init der Unit nach der Initialisierung von stdio aufrufen und den Import mit Prüfung auf ein esscape char abbrechen wenn man das eeprom nicht neu beschreiben möchte (ändert sich ja nicht dauernd was).
Wenn man dann auch noch über Preprozessorbefehle testet ob überhaupt EE(P)MEM genutzt wird und ggf. den Import_epp Code ausschließt, hat man alles beisammen um flüssig mit EPP zu arbeiten, aber keinen zusätzlichen Code bei Nutzung von PROGMEM. Damit wird bei Programmstart & Nutzung von EEPROM immer erst das abbrechbare Laden des epp angeboten.
Da die Importfunkton nicht größer 1kb ist, hat man allein durch auslagern von Strings in jedem Fall ein Platzgewinn und wenn man die Importfunktion nicht mehr braucht kann man sie auskommentieren. Wie am Codebeispiel oben zu sehen, alles mit einer einzigen Ziffer (0,1,2) einstellbar. Also 1 KB mehr Platz für Constanten bzw. Code letztlich ohne eine einzige Zeile Code mehr! Eigene.. "händisch" verwaltete Daten (deren Verwaltung sicher Codezeilen kosten!!) kann man zudem in der Adressierung als Topdown Model anlegen.. also "von oben runter". Dann besteht auch kaum die Gefahr das sich die Compilervars und die eigenen im Speicher begegnen da der Compiler die Daten als Bottomup ablegt.
Lesezeichen