IAR编译宏定义提示警告的问题

来源:本站
导读:目前正在解读《IAR编译宏定义提示警告的问题》的相关信息,《IAR编译宏定义提示警告的问题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《IAR编译宏定义提示警告的问题》的详细说明。
简介:其实如果不管这个警告,程序运行也是正确的,但是我们在调试程序的时候还要多解决一些警告问题,不然代码总是有点缺陷的。

在调试STM32 IAR开发环境的时候碰到如下问题,宏定义

#define SDA_IN() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=8<<28;} (此行提示警告)

#define SDA_OUT() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=3<<28;} (此行没有提示警告)

编译结果总是提示警告,针对上面红色的宏定义。

Warning[Pe068]: integer conversion resulted in a change of sign (整数转换导致符号变化)

============================================================

实际上那个GPIOB->CRL是32位的寄存器,数值没有溢出啊。

后来google一下,有个网友的意见说,左移就是乘法,是有符号整数计算的。

8<<28的值,如果按照有符号乘法已经溢出了,如果是无符号的话就没有问题了。

下面的一个条宏定义3<<28即使按照有符号乘法也没有溢出,所以它没有提示警告。

解决方法强制类型转换,将有符号的转变为无符号的。

#define SDA_IN() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}

#define SDA_OUT() {GPIOB->CRL&=0x0FFFFFFF;GPIOB->CRL|=3<<28;} (此行没有提示警告)

其实如果不管这个警告,程序运行也是正确的,但是我们在调试程序的时候还要多解决一些警告问题,不然代码总是有点缺陷的。

提醒:《IAR编译宏定义提示警告的问题》最后刷新时间 2024-03-14 01:08:55,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《IAR编译宏定义提示警告的问题》该内容的真实性请自行鉴别。