Adressierung bei EEPROMS in C

Gast #205441
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?
Gast #205442
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... :\
Angehängte Dateien:
Gast #205443
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.