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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.