2015-07-19 10 views
0

我不太確定ulConfig |= ulMode;是什麼意思?如果什麼是ulConfig | = ulMode;意思?

void gpio_setup_mode(unsigned long ulGpioNum, unsigned long ulMode, unsigned long ulInvert) 
{ 
    unsigned long ulConfig = ulInvert; 
    ulConfig |= ulMode; 
    s_ptGPIO->auiCFG[ulGpioNum] = ulConfig; 
} 

gpio_setup_mode(GPIO8, GPIO_MODE_OUTPUT,  GPIO_NOINVERT); 

其中GPIO8,GPIO_MODE_OUTPUT,GPIO_NOINVERT

#define GPIO8       8  
#define GPIO_NOINVERT   0x00000000 
#define GPIO_MODE_OUTPUT  0x00000011 
+0

關於gpio設置序列有幾行代碼。你沒有問任何關於這些線的問題。但是,它們的作用是:GPIO端口8的位0和1被設置爲輸出,輸出不會反轉。 – user3629249

回答

2
​​

相當於

ulConfig = ulConfig | ulMode; 

| - 操作員在兩個操作員之間執行二進制「或」操作。

從C11-標準(草案):

6.5.12按位或運算符

[...]

Contrains

2中的每個的操作數應具有整數類型。

語義

[...]

4的結果|運算符是操作數的按位或運算(即 中的每個位,當且僅當轉換的操作數中至少有一個對應位置位時纔會置位結果)。

+0

'ulConfig'是一個本地臨時變量,用於存儲'ulInvert | ulMode;'。而不是前兩行,也可以寫成:'unsigned long ulConfig = ulInvert | ulMode;'有時候有多種方法來實現某種邏輯。 @ user3826752 – alk

+0

嗨。請問能否解釋一下#define GPIO_CFG_MODE_IN_READ \t(0x0 << 3) #define GPIO_CFG_IOCFG_IN \t(0x0 << 0)是什麼意思?這我不明白(0x0 << 0)和(0x0 << 3)。 @ alk – user3826752

+0

@ user3826752:這根本不涉及這個問題。所以它應該成爲一個新問題。 – alk