标题: C语句中,为什么这个地方不能打断点 [打印本页]

作者: zhou5201986    时间: 2018-12-13 11:50
标题: C语句中,为什么这个地方不能打断点
求助:

void        Read_Pressure_Data(u8 Pressure_Num)
{
        u8 i;
        if(Pressure_Num == 1)
        {
                Pressure_Data = 0;
                for(i=0;i<8;i++)
                {                  
                        SCL1 = 1;///////////////////////////此处无法打断点,如截图。  
                        Delay_uS(1);
                        Pressure_Data<<=1;
                        Pressure_Data|=SDA1;
                        Delay_uS(1);
                        SCL1 = 0;
                        Delay_uS(1);/////////////该语句执行完后 下次直接跳到 444行, 443行没有执行。(443行没发打上断点)
                }       
        }       

断点.jpg (56.02 KB, 下载次数: 61)

断点.jpg

作者: zhou5201986    时间: 2018-12-13 13:14
调节优化等级为3时,该处可以运行打断点了。
但没明白为什么优化等级调高后,该语句竟然没转成汇编,被优化掉该语句。
作者: zhou5201986    时间: 2018-12-13 13:17
改成PDATA或XDATA后,即使高优化等级也可以了。
作者: kanmu    时间: 2018-12-13 15:01
keil设置里面,点击c51,再点击优化程度选择,选择0级优化就可以解决问题。
作者: sxhwdz    时间: 2018-12-13 16:49
因为优化时,相同的指令合并,该处会被多次执行,程序无法判断断点实际情况。具体的应该结合编译后的汇编程序,更好理解。在汇编里面打断点才是最准确的。在C里面要打断点调试,可以先将优化级别降到最低,调试通过后再把优化级别调高。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1