Leider motzt der Compiler bei dieser Scheibweise rum.
Anonyme Strukturen sind nicht Bestandteil von ANSI-C89 sondern eine compiler-spezifische Erweiterung.
union _WORD
{
word _word;
struct
{
byte LowByte;
byte HighByte;
}; // <- kein Bezeichner, d.h. anonym
} SuperWord;
Daher:
union _WORD
{
word _word;
struct
{
byte LowByte;
byte HighByte;
} foo; // <- beliebiger Bezeichner
} SuperWord;
// Zugriff:
SuperWord._word = a;
b = SuperWord.foo.LowByte;
c = SuperWord.foo.HighByte;
Bei den Datentypen in deinem Code solltest du dich vergewissern, daß beim CCS ein int auch 16 Bit aufnehmen kann. Bei älteren Versionen war das nicht der Fall.
Portabler Ansatz, der bei den meisten Compilern genauso effizient ist:
#define LOW_BYTE(x) ((unsigned char)((x)&0xFF))
#define HIGH_BYTE(x) ((unsigned char)(((x)>>8)&0xFF))
unsigned int i;
unsigned char a, b;
...
a = HIGH_BYTE (i);
b = LOW_BYTE (i);
Viele Grüße
Bernd