Hallo PicNick,
erst einmal Danke für deine Antwort,

ich hab das grad mal ausprobiert und dachte ich träume. Nach welchen Kriterien legt denn mein Compiler die Variablen an ?????
Schau Dir mal die Adressen laut Mapfile an, da fällt man doch vom Glauben ab.

#pragma pack(1)
char name[5]; /* Adresse laut Mapfile: 6A5C 8 Bytes reserviert, sizeof liefert 5 */
char addr[13]; /* Adresse
laut Mapfile: 6A24 16 Bytes reserviert, sizeof liefert 13 */
char plz[5]; /* Adresse
laut Mapfile: 6A64 8 Bytes reserviert, sizeof liefert 5 */
#pragma pack()

Sizeof liefert aber immer die richtige Größe.

Hab dann mal folgendes probiert:

name[1] Compiler reserviert 1 Byte
name[2] Compiler reserviert 2 Byte
name[3] Compiler reserviert 4 Byte
name[4] Compiler reserviert 4 Byte
name[5] Compiler reserviert 8 Byte
name[6] Compiler reserviert 8 Byte
name[7] Compiler reserviert 8 Byte
name[8] Compiler reserviert 8 Byte
name[9] Compiler reserviert 12 Byte
name[12] Compiler reserviert 12 Byte
name[13] Compiler reserviert 16 Byte

Meiner Meinung nach funktioniert PACK überhaupt nicht. Hab aber grad gelesen, daß das pack NUR nur in Verbindung mit struct funktioniert. Kann das sein ???
Mit dem (push) und (pop) beim pack scheint mir eine gute Sache zu sein, das unterstützt mein IAR Compiler auch.
Ich kann das wohl auch so schreiben, wenn ich das richtig verstanden habe.
#pragma pack(push,1) und am Ende dann #pragma(pop) Deine Variante akzeptiert er aber auch.

Nun aber ab ins Wochenende,
Siro