struct-Grösse automatisch anpassen

Gast #1657019
Lesenswert?

Hallo,

ich möchte ein struct automatisch so padden, dass die Grösse immer ein 
Vielfaches von 64 ist. Das wenn möglich automatisch vom 
Compiler/Preprocessor:

1
typedef struct
2
{
3
    u8 foo1;
4
    u16 foo2;
5
    u8 padder[????]
6
} tPaddedStruct;

Gibt's da eine Möglichkeit ?

Gruss und Danke
#1657331
Lesenswert?

mach eine Union drum herum. Also
1
typedef union{
2
    uint64_t padding;
3
    struct {
4
       uint8_t val;
5
       uint16_t val2;
6
    }; 
7
}tPaddedStruct

Nicht ganz optimal, da du selber für das vielfache sorgen musst, aber 
für 1x 64bit geht das. Ansonsten bleibt dir wirklich 
Compiler-spezifisches byte aling auf 64bit adressen.

Wär halt mein Lösungsansatz.
gruß
Mobius
Gast #1658014
Lesenswert?

@Oliver: Weil diese Strcut in einem EEPROM dreifach gesichert wird. 
Dieses EEPROM eine Pagesize von 64Byte hat und ich sicherstellen möchte 
das das Schreiben einer Struct keinen Einfluss auf schon geschriebene 
Daten hat (das wäre aber der Fall, wenn Teile von 2 Struct's eine Page 
verwenden würden).

Gruss
Gast #1658037
Lesenswert?

Hm, ich würde das über die Zuordnung von Blöcken/Adressen im EEPROM zu 
den Variablen lösen. Ein Block (oder zwei, oder drei), ein struct. Das 
kann man dann alles im Programm zur Laufzeit einrichten. Irgend eine 
Möglickeit der direkten Adressierung wird das EEPROM ja wohl bieten.

Alternativ liesse sich zur Laufzeit ein Speicherblock mit 64byte (oder 
einem vielfachend davon) erzeugen, in den du die Daten der eigentlichen 
struct-Variable per memcopy hineinkopierst, und das alles zusammen dann 
ins EEPROM schreibst.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren