2015-12-21 42 views
3

我想要做的GPIO因此,一些位操作,假設我有三個變量來定義一些GPIO設備的狀態是否開啓或關閉:位操作一些口罩

mask   : 1 means bit is set, and need to be calculate 
value   : real gpio value 0/1 
active_level; : 1 means high active, 0 means low active 

假設我有:

mask : 0010 0001 
value : 0000 0001 
active: 0000 0001 

有沒有什麼好的方法(此時我正在考慮循環)以獲得基於活動級別的結果?在上述情況下,第0位爲高電平有效,第5位是低電平有效,並且由於位0值高和第5位爲低,因此其結果是:

result: 0010 0001 

以後,我想要做的是檢查是否結果==面膜,如果是指GPIO設備狀態上(如按下兩個按鈕)

感謝

回答

3

您可以考慮以下的位操作。

轉換value成「1表示活性」格式

value_in_activeness = value^(~active); 

此操作從「1爲高時,0是低」到「1是活動的,0是未激活」變爲格式。

active代表「哪些位是高電平有效,哪些是低電平有效」。便利的是,它的補充~active意味着「我想要轉換哪些位以及我想保留哪些位」。異或操作^進行實際轉換。

在你的例子中,value_in_activeness將變成1111 1111。但不要擔心,因爲我們有下一步。

屏蔽掉了「我不關心」位

bits_I_care = value_in_activeness & mask; 

使用&做到位掩碼是如此基本,我不知道什麼或如何解釋。

在你的例子中,結果是0010 0001

+0

謝謝!這就是我正在尋找的:) – user430926