加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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。推荐使用第二种,比较清晰!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读