Hallo Kann mir bitte jemand sagen wieso sizeof(Info) den Wert 32 liefert? #pragma pack(1) typedef struct { unsigned int a ; unsigned int Speed; unsigned char time; unsigned char val2 ; unsigned int temp; unsigned char Food; unsigned char LimitSwitchState; char Timeout; unsigned int BufCount; unsigned char CurrentT; unsigned int FFactor; unsigned int SFactor; }TInfo; TInfo Info; nach meiner Rechung müsste das Ergbenis 18 sein. Habe schon verschiedene Versionen von pack versucht Vielen Dank Frank
kann es etwa sein, dass ein unsigned int bei einem ARM7 4 byte gross ist...:)?
>nach meiner Rechung müsste das Ergbenis 18 sein dann schau nochmal in ein C Buch was >sizeof(Info) bedeutet.
Hallo, da der ARM eine 32 Bit Architektur besitzt würde ich das mal vermuten. Ganz einfach herauszufinden mit sizeof(int). Die Summe der Struct Elemente beträgt dann 30. Die restlichen 2 Bytes werden aufgefüllt um die Struct selbst int aligned zu bilden. gruss markus
@alle Antworter: Woher wisst ihr, dass der OP einen ARM, bzw. irgendeinen 32Bit-Proz. benutzt? staun SCNR um konstruktiv zu sein: wenn der µC irgendein Alignment bevorzugt, solltest du die "char"s (und evtl. auch "short"s) zu Zweier- (Vierer-)Gruppen umsortieren. hth. -Jörg
> @alle Antworter: > Woher wisst ihr, dass der OP einen ARM, bzw. irgendeinen 32Bit-Proz. > benutzt? *staun* Weil er es selbst geschrieben hat. Wozu soll die Struct überhaupt gepackt werden?
Hallo zusammen Ich entwickle für den LPC2148:) In der Tat, der Compiler ziert sich etwas beim Packen. Ich habe mir nun damit geholfen, dass ich die einzelnen Variablen mit Hilfe von memcpy in einen Byte-Puffer kopiert habe. Nicht gerade effizient aber es funktioniert. Interessieren würde es mich aber doch noch ob es irgendwie möglich ist. Beste Grüsse und vielen Dank Frank
Ach ja, die Struktur ist 32 byt gross... Wie Markus bereits hergeleitet hat..
Hast Du das schon gemacht? struct test_t { int a; char b; int c; } __attribute__((_packed_)); Quelle: http://sig9.com/articles/gcc-packed-structures Mario
Hallo Mario Vielen Dank für Deine Info. Diese Version habe ich erfolglos auch schon probiert. Trotzdem, vielen Dank. Beste Grüsse Frank
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.