STM32中的if语句判断32位变量不正确

2020-01-11 18:14发布

本帖最后由 SUPER_CRJ 于 2018-1-12 11:14 编辑

使用芯片STM32F10X系列时,发现下列问题:
        typedef union
        {
                u8 IndexLen8[2048]; // 可正常读出,不可写入
                u16 IndexLen16[1024];  // 1024个16位
        }_Flash_High_Density_TypeDef;
#define HighDensity_FlashPage(x)    ((_Flash_High_Density_TypeDef *) (0x08000000+x*0x800))
#define L_APP_SIZE_H                      HighDensity_FlashPage(6)->IndexLen16[1]   // 这个的值为:0xFFFF
#define L_APP_SIZE_L                      HighDensity_FlashPage(6)->IndexLen16[2]    // 这个的值为:0xFFFF

#define STM32FlashMemorySize ( ( unsigned short int *) (0x1FFFF7E0))  // 这个指针值是:64

发现:使用下面语句,出的结果是我想要的。也就是会retrun FAIL
if( (u32)(( L_APP_SIZE_H<<16 ) + L_APP_SIZE_L ) >=  (u32)( (*STM32FlashMemorySize)*1024 ) )  //
        {
                return FAIL;  
        }
但是:使用下面,就不会
if( (( L_APP_SIZE_H<<16 ) + L_APP_SIZE_L ) >=  ( (*STM32FlashMemorySize)*1024 ) )  //
        {
                return FAIL;  
        }
这是为什么?

最新结果:谢谢大家,就是符号位的问题,也感谢shangdawei的编译器解析,因为没有加强制转换默认为有符号数:于是0xFFFFFFFF这个数,实际上就是最小的有符号的数,而程序的本意是无符号的判断
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。