不知是不是STC 的一个bug
UINT8 QND_I2C_WRITE(UINT8 Regis_Addr,UINT8 Data){
UINT8 ret=0;
UINT8 tryCount = I2C_TIMEOUT_COUNT;
while(--tryCount)
{
I2C_Write_1byte(I2C_DEV0_ADDRESS,Regis_Addr,Data);
qnd_i2c_timeout=0x00;
if(qnd_i2c_timeout==0x00) break;
//break;
}
if(tryCount)
{
ret=0;
}
else
{
ret=1;
qnd_i2c = 0;
}
return ret;
}
UINT8 QND_I2C_WRITE(UINT8 Regis_Addr,UINT8 Data)
{
UINT8 ret=0;
UINT8 tryCount = I2C_TIMEOUT_COUNT;
while(--tryCount)
{
I2C_Write_1byte(I2C_DEV0_ADDRESS,Regis_Addr,Data);
qnd_i2c_timeout=0x00;
//if(qnd_i2c_timeout==0x00) break;
break;
}
if(tryCount)
{
ret=0;
}
else
{
ret=1;
qnd_i2c = 0;
}
return ret;
}
为什么以上两个函数运行结果不一样??? 要看上下文才好分析 因为这条语句qnd_i2c_timeout=0x00; 所以下面的if(qnd_i2c_timeout==0x00) break;和单独break;意义是一样的,可是运行结果就是不一样Regis_Addr和 Data值在if(qnd_i2c_timeout==0x00) break; 有这个的那段代码被莫名奇妙的修改,不知为何,而单独一个break就没有什么错误,但是我就是需要条件break ,郁闷死了 上下文,理顺逻辑啊 如果你要找一个芯片的Bug,最基本的前提是你得用最低层的语言。自已做的是什么都搞不清,如何谈Bug。 兄弟,我没看代码
不过,如果用一个IIC你都说有bug
那不是你奇葩,就是MCU奇葩了
不过,看情形~~~你要奇葩了~~~~ format 发表于 2012-5-25 21:17 static/image/common/back.gif
兄弟,我没看代码
不过,如果用一个IIC你都说有bug
这话何解?不是iic问题,只不过这两个代码为何就产生不一样的结果? 看一段代码就轻易怀疑集成电路有BUG,作为开发人员可真不是个好的习惯!哪怕是STC也一样。
这种问题多半是编译器假设了qnd_i2c_timeout的值。在qnd_i2c_timeout定义处加volatile,或者把编译器优化级别调低,不知道结果是不是还一样? 本帖最后由 壹佰法拉 于 2012-6-2 13:07 编辑
楼主该自己重新检查一下自己的程序;如果你是指红色的代码部分出错误的话就更明显了;
若上面的是个正常的函数的话,你下面一个函数就是错误的;
下面的是将整个判断语句给“屏蔽”了!而且下面一行还露出个尾巴 “break;” 这个尾巴导致无论在任何情况下,你的 while 循环都无条件 跳出;
而上面的你什么都没“屏蔽”;貌似你将 break; 给“屏蔽”了;
可是它上面判断语句的后面还跟着一个 break; 呢!
估计是你自己乌龙了吧!
页:
[1]