2017-07-07 4 views
0

ich eine Struktur haben nachfolgend aufgeführt:ein struct Mitglied in eine neue Struktur kopieren

typedef struct { 
    /* Device */ 
    UART_DEV uartDev; 
    /* gpio */ 
    uint32_t gpiopio; 
} DEVICE; 

In main.c ich eine neue uart Gerät erklären und in eine Funktion namens configure() übergeben;

/* main.c */ 

static UART_DEV newUartDev; 
configure(newUartDev); 

configure() in test.c und innerhalb der configure Funktion Ich möchte befindet sich eine Kopie des uart Gerät erstellen und speichern sie im globalen Speicher.

/* Test.c */ 

UART_DEV globalUartDev; 
DEVICE globalDevice; 

static int configure(UART_DEV newUartDev) { 
    /* Create a global copy of spi device */ 
    globalUartDev = newUartDev; 
    DEVICE.uartDev = globalUartDev; 

} 

Dann rufe ich eine andere Funktion in main.c setTest. setTest befindet sich in test.c. Ich übergebe es nicht das uart Gerät, das in main.c deklariert wird, stattdessen möchte ich einfach die globale Struktur verwenden, die ich vorher erstellte. setTest Anrufe open in dev.c

/* test.c */ 

setTest() { 
    open(&globalDevice); 
} 

und schließlich werde ich das uart Gerät in offener verwenden.

/* dev.c */ 
int open(DEVICE *dev) { 
read(dev->uartDev) 
} 

Ist dies der richtige Weg, um eine Kopie zu erstellen und um Dateien herumzugeben?

+4

Globals sind böse. –

+0

@MichaelWalz ist es besser, als die Datei von main.c weiterzugeben? – homeGrown

+3

Schreiben Sie keinen Roman, der Ihren Code beschreibt, sondern veröffentlichen Sie den ** tatsächlichen ** Code als [mcve]. – Olaf

Antwort

0

DEVICE ist kein Objekt, es ist eine Struktur. globalDevice ist ein Objekt. So sollte es sein

globalDevice.uartDev = globalUartDev; 
+0

'DEVICE' ist ein' typedef' für eine 'struct', und' globalDevice' ist ein 'DEVICE'' struct'. –

Verwandte Themen