Hallo, ich bin auf der Suche nach einer Erklärung wie die Eeprom Daten aus dem C-Code (eeprom section) in das Eeprom des Prozessors organisiert werden. Meine bisherigen Erfahrungen haben gezeigt, dass die Daten einfach rückwärts in des Eeprom geschrieben werden. D.h. der Letzte Eeprom Wert im C-Code steht im Assembler File an erster Stelle, also hat auch die nierdrigste Adresse im Eeprom und so weiter. Meine Frage hierzu: kann man generell von dieser Methode ausgehen oder hängt dies von Faktoran ab? Grüße Günni
Ohne zu erwähnen, um welchen Compiler und vor allem: welchen Prozessor es sich handelt, können wir nur raten.
Ich würde nicht davon ausgehen. Früher wurden sie genau andersrum sortiert. Die neue Reihenfolge beim GCC 3.4 scheint ein Fietscher, das ein Seiteneffekt irgendeiner anderen Änderung ist. Du musst auch immer damit rechnen, dass der Compiler u. U. mal Variablen nach Größe sortiert (z. B. um 16-bit Variablen zusammen zu halten). Wenn Du eine bestimmte Reihenfolge brauchst, dann deklariere den gesamte EEPROM-Inhalt in eine struct hinein, und benutze diese struct als einzige Variable im EEPROM überhaupt.
Hi wenn du die genauen Addressen außerhalb deines Programms brauchst (ich hab das mal für eine Konfiguration mittels PC benötigt) dann kannst du diese aus dem map-file extrahieren. Ein kleines perl Skrip hat bei mir die Daten extrahiert und in eine Datei zur weiteren Verarbeitung geschrieben. #!/bin/perl -w open(INPUT,"main.map") or die "Fehler beim Öffnen des map file: $!\n"; open(OUTPUT,"> eeprom_addr.bin") or die "Fehler beim Öffnen von eeprom_addr.bin: $!\n"; $merker = 0; #eeprom-addressen aus map file extrahieren while(defined($i = <INPUT>)) { if($merker == 1) { if($i =~ __eeprom_end) { $merker = 0; } else { if($i =~ /eeprom_./) { $i =~ s/ {1,}//; $i =~ s/ {1,}/#/; $i =~ s/\n/#/g; $i =~ s/\r//g; $i =~ s/0x00810//g; print OUTPUT $i } } } if($i =~ /\*\(\.eeprom\*\)/) { $merker = 1; } } print OUTPUT '#'; close(INPUT); close(OUTPUT); Nicht schön erfüllt aber seinen Zweck. Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.