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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.