www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Adressierung bei EEPROMS in C


Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe da ein kleines Problem. Zur Berechnung der Adressen von
Tabellen im EEPROM würde ich gerne die Tabellengrösse verwenden, ohne
bei möglichen Änderungen jedesmal die Adressen per Hand berechnen zu
müssen. Eine Prüfung der Bereichsgrenze (EE_ADR_END) sollte schon beim
compilieren erfolgen und nicht erst zu Laufzeit.


Beispiel:

#define ENTRIES_TAB1 100
#define ENTRIES_TAB2 130
#define EE_ADR_END   0x0FFF

typedef {
  uint32 a;
  int16  b;
} tab1_t;

typedef {
  uint8 a;
  int16  b;
} tab2_t;

tab1_t tab1[ ENTRIES_TAB1];
tab2_t tab2[ ENTRIES_TAB2];

#define EE_ADR_TAB1 0
#define EE_ADR_TAB2 ( EE_ADR_TAB1 + sizeof( tab1));

#if ( ( EE_ADR_TAB2 + sizeof( tab2)) > EE_ADR_END)
#error("Tabelsize overflow")
#endif


Weil aber sizeof nicht vom Präprozessor aufgelöst werden kann,
funktioniert das Ganze nicht. Hat jemand eine Idee?

Autor: OldBug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Auf die Schnelle wüsste ich da nur eine Lösung, siehe Anhang.
Getestet mit gcc auf Win-XP, CHECK_OVF auf 1 setzen, damit der
Präprozessor schon beim Kompilieren einen Fehler bei Überlauf
Produziert. Bleibt CHECK_OVF auf 0, kann man zur Laufzeit Testen.

Was anderes fällt mir im Moment nicht ein... :\

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was anderes fällt mir im Moment nicht ein... :\
Geht mir im Moment genauso.

Vermutlich kann ich das so machen, weil sich die Strukturen der
Tabellen wahrscheinlich nicht mehr ändern werden. Zumindest kann ich
damit eine Änderung der Tabellengrößen automatisch übernehmen und einen
range check durchführen.

Dein Vorschlag ist auf jedenfall deutlich besser als mein Ansatz.
Vielen Dank.

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.