Strukturen und das Padding Byte

Gast #323079
Lesenswert?

Hallo Leute,

ich habe ein kleines Problem. Ich habe eine Struktur (8 bit und 16 Bit
Werte gemischt). Diese Struktur ist jedoch word aligned. Sprich wenn
ein 16-Bit Wert an einer ungeraden Adresse liegt wird in der Struktur
ein padding-byte eingefügt. Genau dieses padding-byte will ich aber
vermeiden (weil sonst die Addressen der 16 Bit Werte nicht mehr
stimmen).
Hintergrund ist folgender :

Ich arbeite mit dem MSP430 unter IAR. Ich will mich mit dem Thema FAT
befassen. Der VBR (Volume Boot Record) ist ja 36 byte lang. Definiere
ich aber die Struktur des VBRs, so macht der mir 40 Byte daraus. Es
werden also 4 Padding Bytes eingefügt. Ich kann also nicht einfach die
Struktur definieren, mir nen sektor einlesen und meine Struktur darüber
"mappen" um direkt zugriff auf die einzelnen Datenfelder zu haben.

Meine Frage ist nun : Wie kann ich das Alignment des Compilers in
diesem Fall (und wahrscheinlich noch in weiteren Fällen, wenn ich
beispielsweise Directory Einträge lesen möchte) abschalten ? Ich möchte
das Alignment nciht permanent ausschalten sondern nur für den Zugriff
bei bestimmten strukturen. Gibt es da was ? Irgend eine Pragme
Anweisung vielleicht ?!

Gruß
Rene
Gast #323081
Lesenswert?

hi tom,

danke für den tip. aber das scheint wohl nur beim gcc so zu klappen.
(iar zickt dabei rum). wenn ich typedef struct packed { .. } schreibe,
compiliert der das zwar, fügt aber trotzdem noch die padding bytes ein.
Gast #323083
Lesenswert?

Hallo Daniel

es geht sich darum das ich die roh-daten schon habe (also ohne
padding-byte) und meine struktur aber automatisch ein padding byte hat
(vom compiler aus).
außerdem wäre es zu aufwendig jedesmal zu gucken wo ich die daten
hinpacken muß.
das problem hat sich aber erledigt. es gibt beim iar eine pragma
anweisung mit der ich das alignment für die struktur festlegen kann.

für alle die es evtl. brauchen : #pragma pack(1) schaltet das alignment
auf byte (möglich wären dann auch sachen wie #pragma pack(4) (für
long-alignment))

trotzdem dank an alle
gruß
rene

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