0xFFFF的Debug
发布时间:2020-12-15 18:49:30 所属栏目:百科 来源:网络整理
导读:for(i=0;iGyroParaSectorSize;i+=2)/*i+=2 == 参数只需2个字节 */{if((int16_t)0xffff == *((int16_t *)(GyroParaSectorAddr+i))) /* 校验是否可写*/{break;}} 以上程序,i=GyroParaSectorSize跳出,即使Flash未写入,默认值为全F,也不能成立。因为编译器中
for(i=0;i<GyroParaSectorSize;i+=2) /* i+=2 ==> 参数只需2个字节 */ { if((int16_t)0xffff == *((int16_t *)(GyroParaSectorAddr+i))) /* 校验是否可写*/ { break; } }以上程序,i=GyroParaSectorSize跳出,即使Flash未写入,默认值为全F,也不能成立。因为编译器中0xFFFF是默认无符号数,但是后者却转换成有符号16进制数,因此后者0xffff在有符号数中表示-1,而前者在无符号中表示65535,因此无法满足条件。改进方法有三种,一是后者强制类型转换为无符号数,二是前者强制转换为有符号类型如(uint16_t)0xffff,三是,前者之间为-1。推荐使用第二种,比较清晰! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |