mikrocontroller.net

Forum: Compiler & IDEs __packed


Autor: west (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin gerade beim durcharbeiten eines c programms und bin nun auf 
folgende Struktur gestossen:

__PACKED_PRE
struct __PACKED_POST RCX_UART__TEXT_OUT_CNF_DATA_Ttag  /* text output 
confirmation data */
{
  /** Output text */
  TLR_INT8 szText[UART__TEXT_OUT_MAX_LEN];
};


habe mir die Definition von __PACKED_PRE und __PACKED_POST gesucht:

    #define __PACKED_PRE __packed
    #define _PACKED_POST __attribute_ ((_packed_))

Ich verstehe diese Struktur nicht (Warum __PACKED_PRE und __PACKED_POST)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
west wrote:
> habe mir die Definition von __PACKED_PRE und __PACKED_POST gesucht:
>
>     #define __PACKED_PRE __packed
>     #define _PACKED_POST __attribute_ ((_packed_))
>
> Ich verstehe diese Struktur nicht (Warum __PACKED_PRE und __PACKED_POST)

Kann es sein, dass da noch ein paar #if in der Nähe sind.

Ansonsten: Da wirst du wohl dein Compilerhandbuch bemühen
müssen. Das ist alles Nicht-Standard Zeugs.

Einige Compiler won solche Nicht-Standard Zusatzangaben
vor dem Datentyp sehen, andere hinter dem Datentyp wieder
andere überhaupt als Abschluss der Definition.

Ich schätze mal der Programmierer wollte sich hier eine
gewisse Flexibilität einbauen um verschiedene Compiler
befiedigen zu können.

Der eine möchte es sehen als
__packed struct xy { ... };

der andere will haben
struct _attribute_ ((_packed_)) xy { ... };

und so hat er halt den kleinsten gemeinsamen Nenner
gesucht und für sich definiert, dass er das immer als

PRE struct POST xy { ... };

schreibt und per Makro PRE bzw POST auf den richtigen Wert
bzw auf leer setzt.

Das alles ist jetzt aber aus der holen Hand geraten. Such mal
die Umgebung der PRE und POST Makros ab, ob die in einem #if
eingeschlossen ist, dass compilerspezifisch gesetzt wird.





Autor: west (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Karl Heinz
Stimmt, die defines sind compilerspezifisch
Hab ich übersehen
 Vielen Dank

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.