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?
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... :\
> 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.
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.