Hallo, vielleicht ist ja gerade ein GCC Crack am Start. Habe soeben den
DMAC vom ATxmega ans laufen bekommen, allerdings stören mich da noch ein
paar Fehlermeldungen.
Es geht darum eine Adresse in einen integralen Datentypen zu wandeln und
auf die Art und Weise in 3 8-Bit-Stückchen zu zerhacken, damit man diese
Adresse in das Adressregister der DMA laden kann.
Konkret handelt es sich um folgenden Code:
1 | EXTADC_TX_DMA.SRCADDR0 = (uint8_t) ( (uint32_t) ( (void*)ConvBytes ) >> 0 );
|
2 | EXTADC_TX_DMA.SRCADDR1 = (uint8_t) ( (uint32_t) ( (void*)ConvBytes ) >> 8 );
|
3 | EXTADC_TX_DMA.SRCADDR2 = (uint8_t) ( (uint32_t) ( (void*)ConvBytes ) >> 16 );
|
4 | EXTADC_TX_DMA.DESTADDR0
|
5 | = (uint8_t) ( (uint32_t) ( (void*)& ( EXTADC_UART.DATA ) ) >> 0 );
|
6 | EXTADC_TX_DMA.DESTADDR1
|
7 | = (uint8_t) ( (uint32_t) ( (void*)& ( EXTADC_UART.DATA ) ) >> 8 );
|
8 | EXTADC_TX_DMA.DESTADDR2
|
9 | = (uint8_t) ( (uint32_t) ( (void*)& ( EXTADC_UART.DATA ) ) >> 16 );
|
In jeder Zeile gibt es folgenden Fehler:
1 | ../ExtADC.c:113: warning: cast from pointer to integer of different size
|
Nunja, die Fehlermeldung kommt wohl, weil (void*) 16-Bit breit ist und
uint32_t eben 32-Bit breit. Auch wenn ich hier kein Gefahrenpotenzial
sehe, wird das als Warnung angegeben. Leider sehe ich aber auch keinen
Weg drumherum, bzw. ich sehe gar nicht den Grund, warum der DMAC
überhaupt 24-Bit Adressen braucht, wenn der GCC sowieso nur 16-Bit
verwalten kann?
Eine zweite Stellungnahme wäre vielleicht interessant, danke schon mal
im Voraus.