STM32程序编译出现以下问题的解决方法:
//IO方向设置
#define SDA_IN() {GPIOC->CRH&=0X0FFFFFFF;GPIOC->CRH|=8<<28;}
#define SDA_OUT() {GPIOC->CRH&=0X0FFFFFFF;GPIOC->CRH|=3<<28;}
结果编译时出现错误
compiling myiic.c...
..\HARDWARE\IIC\myiic.c(57): warning: #61-D: integer operation result is out of range
..\HARDWARE\IIC\myiic.c(57): warning: #68-D: integer conversion resulted in a change of sign
..\HARDWARE\IIC\myiic.c(122): warning: #61-D: integer operation result is out of range
..\HARDWARE\IIC\myiic.c(122): warning: #68-D: integer conversion resulted in a change of sign
内容网上查好像是说
编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,这样就有可能改写了符号位(最高位)
//IO方向设置
#define SDA_IN() {GPIOC->CRH&=0X0FFFFFFF;GPIOC->CRH|=8<<28;}
#define SDA_OUT() {GPIOC->CRH&=0X0FFFFFFF;GPIOC->CRH|=3<<28;}
结果编译时出现错误
compiling myiic.c...
..\HARDWARE\IIC\myiic.c(57): warning: #61-D: integer operation result is out of range
..\HARDWARE\IIC\myiic.c(57): warning: #68-D: integer conversion resulted in a change of sign
..\HARDWARE\IIC\myiic.c(122): warning: #61-D: integer operation result is out of range
..\HARDWARE\IIC\myiic.c(122): warning: #68-D: integer conversion resulted in a change of sign
内容网上查好像是说
编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,这样就有可能改写了符号位(最高位)
答:
加个(u32)在8<<28;
前面就可以了。
前面就可以了。