www.mikrocontroller.net

Forum: Compiler & IDEs Eeprom Adressen der Daten


Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne zu erwähnen, um welchen Compiler und vor allem: welchen Prozessor
es sich handelt, können wir nur raten.

Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GNU C Compiler für AVR ATMega16 (WinAVR)

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.