2017-07-07 97 views
0

我有一個結構概述如下:複製一個結構部件成一個新的結構

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

在main.c中我聲明一個新的UART設備並把它傳遞給函數調用配置();

/* main.c */ 

static UART_DEV newUartDev; 
configure(newUartDev); 

configure()位於test.c的和配置功能,我想創建的UART設備的副本,並將其存儲在全局存儲器內。

/* 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; 

} 

然後我在main.c中調用另一個函數setTest。 setTest位於test.c中。我不通過它在main.c中聲明的uart設備,而是我想只使用我之前創建的全局結構。 setTest電話open在dev.c

/* test.c */ 

setTest() { 
    open(&globalDevice); 
} 

最後我將使用UART設備開放。

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

這是創建副本並將其傳遞給文件的正確方法嗎?

+4

Globals是邪惡的。 –

+0

@MichaelWalz比繼續從main.c傳遞文件好嗎? – homeGrown

+3

不要寫一本描述你的代碼的小說,而是將**實際**代碼作爲[mcve]發佈。 – Olaf

回答

0
DEVICE.uartDev = globalUartDev; 

DEVICE不是一個對象,它是一個結構。因此它應該是

globalDevice.uartDev = globalUartDev; 
+0

'DEVICE'是'struct'的'typedef','globalDevice'是'DEVICE'' struct'。 –