2013-03-12 4 views
3

У меня есть предупреждение о компиляторе в коде при установке 32-го бита. Код работает, но это предупреждение меня раздражает.предупреждение компилятора при установке 32-го бита

Компилятор Keil C, процессор 32 бит ARM. Код выглядит следующим образом

PINSEL0 |= PINSEL_AD15; 

где PINSEL0 является 32 битный регистр, определяемый как

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

и PINSEL_AD15 определяется как:

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

предупреждающее сообщение я получаю это: целочисленный результат работы за пределами допустимого диапазона

ответ

9

Литерал 1 является подписанным целым числом, поэтому при смене на 31 вы выходите из диапазона. Попробуйте использовать целое число без знака:

(1U << 31) 
+0

wow, thats it :) Я бы никогда не догадался об этом. Thanx – Gossamer