Grösse von enums immer 8bit bei wenigen Einträgen?

OP #1931532
Lesenswert?
• ▲
▼
Hallo,

zum Speichern von Zuständen im EEPROM, die als enums hinterlegt sind, 
nutze ich bisher immer die eeprom_write_block - Funktion und gebe die 
Größe des enums immer an. (sizeof..)

Wenn nur max. 20 Zustände definiert wurden, kann dann immer davon 
ausgegangen werden, dass diese 8bit groß sind? Oder ist das zu riskant?

ShortEnums ist aktiviert..

Gruß
Bernhard?
#1931567
Lesenswert?
• ▲
▼
Anders herum wird ein Schuh draus.
Wenn "ShortEnums" aktiviert ist, haben alle enums 8 bit, egal ob 20 
oder 300 Zustände dargestellt werden sollen.

Aber wie groß dein Enum nun ist, erfährt dein Compiler durch sizeof. 
Diese "Funktion" wird nicht zur Laufzeit ausgeführt, sondern von deinem 
Compiler durch eine Konstante ersätzt.
#1931589
Lesenswert?
• ▲
▼
Bernhard N. schrieb:
> Hallo,
>
> zum Speichern von Zuständen im EEPROM, die als enums hinterlegt sind,
> nutze ich bisher immer die eeprom_write_block - Funktion und gebe die
> Größe des enums immer an. (sizeof..)
>
> Wenn nur max. 20 Zustände definiert wurden, kann dann immer davon
> ausgegangen werden, dass diese 8bit groß sind? Oder ist das zu riskant?
>
> ShortEnums ist aktiviert..

Theoretisch ja, praktisch hat eine Version angeblich immer 16 Bit 
verwendet. (Meiner 20100110 funktioniert, sizeof myEnum==1 bzw. ab 
MyEnumValue=256, 2)
Die Durchnummerierung von 0.. sollte aber immer gewährleistet sein.
Schreib doch einfach nur das erste Byte ins Eeprom.

@Volker:
Nein, der Compiler versucht erst mit 8, dann 16, dann 32 klarzukommen.

Schiko
#1931629
Lesenswert?
• ▲
▼
Klaus Wachtler schrieb:
> Du kannst es machen wie du willst: Typ oder Variable.

clevererweise benutzt man die Variable, da braucht man nämlich nur an 
einer Stelle etwas ändern, wenn man den Typ ändert.


zur Ermittlung der Größe darf man auch ruhig undefinierte Pointer 
dereferenzieren, da den compiler hier nur der Typ interessiert.

Point* p;

sendDebugData(p, sizeof(*p));
Gast #1931642
Lesenswert?
• ▲
▼
Ok, danke für die zahlreichen Antworten.

Ich werde in Zukunft bei enums immer die eeprom_write_block mit sizeof 
(enum_t) oder sizeof(enum_var) nehmen, je nach dem, da es ja egal ist.


Gruß
Bernhard Nöst

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.