3

32ビットを設定しているときにコードにコンパイラの警告があります。コードは機能しますが、この警告は私を悩ませます。

コンパイラはKeilC、プロセッサは32ビットARMです。コードは以下の通りです

PINSEL0 |= PINSEL_AD15;

ここで、PINSEL0は32ビットレジスタで、次のように定義されます。

#define PINSEL0         (*((volatile unsigned long *) 0xE002C000))

次のようにPINSEL_AD15定義されます。

#define PINSEL_AD15  ((1<<30)|(1<<31)) 

私が受け取っている警告メッセージは次のとおりです。整数演算の結果が範囲外です

4

1 に答える 1

9

リテラル1符号付き整数であるため、31だけシフトすると、範囲外になります。符号なし整数を使用してみてください。

(1U << 31)
于 2013-03-12T22:00:24.050 に答える