阅读:2398回复:1
我的程序单步运行正常,全速运行跳过了很多函数,直接向下运行了?
这些被跳过的函数是51读写24c64的函数,以写函数为例,原型为
bit I2C_WriteByte(uchar addr1,uchar addr0,uchar savedata); 用if把第一个写函数包含起来如: if(I2C_WriteByte(0x00,0x01,OffTime))DisplayError(); 它能被全速运行,注意必须是首次调用就被包含,之后可不用被if包含, 否则如果第一个被直接调用如: I2C_WriteByte(0x00,0x01,OffTime); 全速运行时就被跳过了向下执行(所谓的跑飞?),但是单步运行正常 可以说明函数体没有错误,是被编译器优化了吗?我的UV2优化程度 是2 data overlaying ,参数offtime是用volatile声明的全局变量。 暂时我的解决办法是用if()把首次被调用的函数括起来,但是我很想知道 为什么会这样, 请教老虾给予我们虾米们指点,谢谢 |
|
沙发#
发布于:2005-08-05 16:16
我自己发现问题所在了
原来是因为每次读或写24c64,要等一个ack才能进行下次读写。我没有等待,所以读写不进去。 以前的main()中读写I2C的部分如下: main() { I2C_WB(0x00,0x00,OnTime); I2C_WB(0x00,0x01,OffTime); I2C_WB(0x00,0x02,I2C_Counter[0]); I2C_WB(0x00,0x03,I2C_Counter[1]); I2C_RB(0x00,0x00,&OnTime); I2C_RB(0x00,0x01,&OffTime); I2C_RB(0x00,0x02,&I2C_Counter[0]); I2C_RB(0x00,0x03,&I2C_Counter[1]); } 改成 main() { while(!I2C_WB(0x00,0x00,OnTime)); while(!I2C_WB(0x00,0x01,OffTime)); while(!I2C_WB(0x00,0x02,I2C_Counter[0])); while(!I2C_WB(0x00,0x03,I2C_Counter[1])); while(!I2C_RB(0x00,0x00,&OnTime)); while(!I2C_RB(0x00,0x01,&OffTime)); while(!I2C_RB(0x00,0x02,&I2C_Counter[0])); while(!I2C_RB(0x00,0x03,&I2C_Counter[1])); } 就万事大吉了。 唉!像我这么菜的虾米们,可以以此为鉴。 |
|