Forum: Mikrocontroller und Digitale Elektronik Problem mit Alignment bei gcc - Fehler in mitgelieferter Datei?


von Mike (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei, den DMA-Controller eines Atmel- Cortex M0+ 
(SAMD11) zu programmieren. Dazu müssen die DMA-Deskriptoren laut 
Datenblatt auf 128 bit-Adressen ausgerichte werden.

Leider führt
1
DmacDescriptor  dacDesc __attribute__ ((aligned (16)));

zur Compilermeldung "alignment may not be specified for 'dacDesc'  "

Etwas Nachforschung ergab, dass die Definition von DmacDescriptor im 
mitgelieferten Definitionsfile "dmac.h" offenbar eine falsche 
Alignment-Spezifiklation enthält:
1
...
2
} DmacDescriptor
3
#ifdef __GNUC__
4
  __attribute__ ((aligned (8)))
5
#endif

Ist das die Ursache für den Fehler beim Compilieren? Wie lässt sich das 
Problem beheben, ohne "dmac.h" zu editieren? Letzteres fände ich sehr 
unschön.

von Nop (Gast)


Lesenswert?

Mike schrieb:
> Wie lässt sich das Problem beheben, ohne "dmac.h" zu editieren?

Wenn Du die Ursache nicht beheben willst, vielleicht funktioniert ja
1
#define 8 16

von Nop (Gast)


Lesenswert?

... also vor #include dmac.h

von asdfasd (Gast)


Lesenswert?

> Compilermeldung "alignment may not be specified for 'dacDesc'  "

Bei mir meckert gcc 4.6.3 dies
1
typedef struct {
2
    volatile int x;
3
} Foo __attribute__((aligned(8)));
4
Foo foo __attribute__((aligned(16)));
nicht an und produziert nen foo mit 16-Byte alignment.

Problem mit dem Namen dacDesc vs dmacDesc?

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
Noch kein Account? Hier anmelden.