在KeilARM的LPCARM,存在(1<<31)编译警告问题
main.c(174): warning: #61-D: integer operation result is out of range main.c(174): warning: #68-D: integer conversion resulted in a change of sign
由于编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,
这样就有可能改写了符号位(最高位)
依此类推,(2<<30),(3<<29)...等都会出现编译警告问题.
解决办法为: ((unsigned int)1<<31),((unsigned int)2<<30),...
所以,在LPC213xdef.h中就有如下的定义:
#define __0 (LPC_REG)0 #define __1 (LPC_REG)1 #define __2 (LPC_REG)2 #define __3 (LPC_REG)3 #define __4 (LPC_REG)4 #define __5 (LPC_REG)5 #define __6 (LPC_REG)6 #define __7 (LPC_REG)7 #define __8 (LPC_REG)8 #define __9 (LPC_REG)9 #define __10 (LPC_REG)10 #define __11 (LPC_REG)11 #define __12 (LPC_REG)12 #define __13 (LPC_REG)13 #define __14 (LPC_REG)14 #define __15 (LPC_REG)15 #define __16 (LPC_REG)16 #define __17 (LPC_REG)17 #define __18 (LPC_REG)18 #define __19 (LPC_REG)19 #define __20 (LPC_REG)20 #define __21 (LPC_REG)21 #define __22 (LPC_REG)22 #define __23 (LPC_REG)23 #define __24 (LPC_REG)24 #define __25 (LPC_REG)25 #define __26 (LPC_REG)26 #define __27 (LPC_REG)27 #define __28 (LPC_REG)28 #define __29 (LPC_REG)29 #define __30 (LPC_REG)30 #define __31 (LPC_REG)31
这样可以用(__1 << 31),(__2 << 30),...解决此类编译警告问题.
这就是LPC213xdef.h搞如此倒塌的问题了~~~ |
文章评论(0条评论)
登录后参与讨论