www.mikrocontroller.net

Forum: Compiler & IDEs byte alignement mit gcc


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es etwa sein, dass ein unsigned int bei einem ARM7 4 byte gross 
ist...:)?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>nach meiner Rechung müsste das Ergbenis 18 sein
dann schau nochmal in ein C Buch was
>sizeof(Info)
bedeutet.

Autor: JJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der Datentyp unsigned int hat 4 Byte.

Autor: Markus B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Joerg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> @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?

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, die Struktur ist 32 byt gross... Wie Markus bereits hergeleitet 
hat..

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mario

Vielen Dank für Deine Info. Diese Version habe ich erfolglos auch schon 
probiert. Trotzdem, vielen Dank.

Beste Grüsse
Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.