本帖最后由 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这个数,实际上就是最小的有符号的数,而程序的本意是无符号的判断
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
C基础不错哦!
一周热门 更多>