0

コンパイラ: IAR プラットフォーム: stm32f4

私はこのコードを持っていますが、期待どおりに動作しません。誰かが私に理由を説明できますか?

#define byteGetbit(x,y) ((x) & (0x01 << (y)))

volatile t_uint8 test=0xFF;
if(byteGetbit(test,0x03)==1){ //always false
   printf("hello"); //can't reach the code here
   test = 0;
}

回避策:

if(byteGetbit(test,0x03)){
   printf("hello");
   test = 0;
 }
4

3 に答える 3

0

ビットを読み取るのではなく、現在の場所でビットを分離します。

byteGetbit を次のように変更する必要があります。

#define byteGetbit(x,y) ((x >> y) & 0x01)

これにより、ビットがビット 0 にシフトされ、分離されます。

于 2013-10-22T21:17:05.047 に答える