Cast von einem struct

Gast #4118096
Lesenswert?

1
typedef union
2
{
3
    // 8-bit data
4
    struct
5
    {
6
        UINT16  data8bit    : 8;
7
    };
8

9
    // 9-bit data
10
    struct
11
    {
12
        UINT16  data9bit    : 9;
13
    };
14

15
    UINT16 __data;
16
} UART_DATA;
17

18

19
extern inline void __attribute__((always_inline)) UARTSendData( UART_MODULE id, UART_DATA data )
20
{
21
    uartReg[id]->tx.reg = data.__data;
22
}


Frage: Wie muss ich *data casten damit er das akzeptiert?


1
void debug_puts(char *data) {
2
    do
3
    {
4
        while(UARTTransmitterIsReady(DEBUG_UART));
5
        UARTSendData(DEBUG_UART, (????)(*data));
6
    } while( *data++ );
7
}
Gast #4118103
Lesenswert?

soll auch ohne cast gehen
1
void debug_puts(char *data) {
2
    UART_DATA tmp;
3
    do
4
    {
5
        while(UARTTransmitterIsReady(DEBUG_UART));
6
        tmp.data8bit = *data;
7
        UARTSendData(DEBUG_UART, tmp);
8
    } while( *data++ );
9
}
Gast #4118148
Lesenswert?

Simon schrieb:
> Was auch geht ist ein:
>
> UARTSendData(DEBUG_UART, (UART_DATA)(UINT16)(*data));
>
> Aber bisher noch ungetestet, compilen tut ers.

warum überhaupt diese struct? übergib doch der UARTSendData einfach 
2Parameter einmal für das 1.byte und einmal für das nächst e bit.

Wie soll denn jetzt UARTSendData wissen, ob es 9 oder 8 bit senden soll? 
Wenn du  data8bit setzt, dann änderst du damit auch nicht das 9.bit.
Gast #4118291
Lesenswert?

Peter II schrieb:
> Wie soll denn jetzt UARTSendData wissen, ob es 9 oder 8 bit senden soll?
> Wenn du  data8bit setzt, dann änderst du damit auch nicht das 9.bit.

Naja, die sache ist das nen PIC32 UART sowohl ein 9 als auch ein 8 Bit 
transfer kann. das wird dann in der microchip lib anhand der 
konfiguration des UARTs bestimmt.
Gast #4118307
Lesenswert?

Simon schrieb:
> UINT16 __data;
Namen von Funktionen/Variablen/Typen die du selbst definierst dürfen 
nicht mit zwei Unterstrichen beginnen. Diese sind reserviert für den 
Compiler+Standard Library. Wenn es funktioniert ist es pures Glück, bei 
der nächsten Compiler-Version kann's schon schiefgehen. Also besser 
umbenennen...

Siehe hier: 
http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren