moin, hab da ein verständnisproblem mit dem Ansprechen einer Union. Im Header ist definiert: #define WORDREG(register_name) union\ {\ unsigned int register_name;\ struct\ {\ unsigned char register_name ## L;\ unsigned char register_name ## H;\ };\ } und des weiteren: typedef struct DMA_struct { unsigned char CTRL; // Control ... WORDREG(TEMP); // Temporary Reg. For 16/24-bit Access ... } DMA_t; So, in meinem source code kann kann ich CTRL einfach mit: DMA.CTRL = 0x80; ansprechen.(kein Problem). Wie spreche ich jetzt aber DMA.TEMP (H oder L) an?
Klausy wrote:
> Wie spreche ich jetzt aber DMA.TEMP (H oder L) an?
DMA.TEMP = 0xabba;
DMA.TEMPL = 42;
DMA.TEMPH = 69;
Klausy wrote: > eben nicht! Doch, genau so. Vorsichtshalber schnell mal mit dem GCC testen ... ja, funktioniert. > Der Compiler sagt dann: undefined member TEMP, bzw. TEMPL Dann liegt da irgendetwas anderes im Argen, z.B. Tippfehler.
Klausy wrote:
> Arbeite mit Codevisoin AVR
Zu dem Compiler kann ich nichts sagen. Vielleicht hat er ja irgendwelche
Probleme mit anonymen Unions.
Dann werfe mal einen verschärften Blick in die Sourcen. Steht da wirklich "WORDREG(TEMP);", und nicht "WORDREG(TMP);", oder "WORDREG(temp);", oder ... Oder steht es vielleicht in einer weiteren struct innerhalb von DMA_struct? Poste doch mal die komplette Definition von DMA_t.
Unbenannte Structs und Unions scheinen nicht Standard zu sein. Übergibt man dem GCC die Option -std=c89 oder -std=c99, meckert er ebenfalls, dass DMA_t keine Member mit den Namen TEMP, TEMPL und TEMPH enthält. Vielleicht muss man beim Codevision im Gegensatz zum GCC diese Erweiterungen explizit aktivieren.
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.