打印
[STM8]

执行单步仿真时直接跳过判断语句

[复制链接]
1176|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
执行单步仿真时直接跳过判断语句

使用特权

评论回复
沙发
zwll| | 2021-5-5 21:36 | 只看该作者

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
zhanghqi|  楼主 | 2021-5-5 21:37 | 只看该作者
比如说,我当前仿真到Rx = 0这里,然后下一步它会直接跳到了Spk_Mute = 0了,中间的if()语句都直接跳过去了

使用特权

评论回复
地板
zhanghqi|  楼主 | 2021-5-5 21:40 | 只看该作者
而且还不能在该语句设置断点

使用特权

评论回复
5
renyaq| | 2021-5-5 21:43 | 只看该作者
然后呢?你是怎么应对这个的呢

使用特权

评论回复
6
zhanghqi|  楼主 | 2021-5-5 21:45 | 只看该作者
继续下一步,它又跳到了Mic_Mute = 0这里,中间的if()语句也是直接跳过去了。我查看CX20709[3]的值是0x18。前几天测还好好的

使用特权

评论回复
7
zwll| | 2021-5-5 21:55 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
8
zhanghqi|  楼主 | 2021-5-5 21:57 | 只看该作者
bool IRcvStr(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin_SDA,GPIO_Pin_TypeDef GPIO_Pin_SCL,uchar sla,uchar suba1,uchar suba2,uchar *s,uchar no)
//读取麦克风和喇叭状态
while (!Rx)
{
        IWDG->KR = 0xAA;
        Rx = IRcvStr(GPIOB, SDA, SDL, 0x28, 0x10, 0x18, &CX20709[3], 1);  
}
Rx = 0;

if ((0x01 & CX20709[3]) == 0x01)
{
        Spk_Mute = 1;
}
else
{
        Spk_Mute = 0;
}

if ((0x08 & CX20709[3]) == 0x08)
{
        Mic_Mute = 1;
}
else
{
        Mic_Mute = 0;
}

使用特权

评论回复
9
renyaq| | 2021-5-5 21:59 | 只看该作者
那说明你的判定条件没有满足啊

使用特权

评论回复
10
xxrs| | 2021-5-5 22:04 | 只看该作者
说明没有满足条件啊

使用特权

评论回复
11
yszong| | 2021-5-5 22:06 | 只看该作者
不满足判定依据 当然不跳进去了

使用特权

评论回复
12
zwll| | 2021-5-5 22:09 | 只看该作者
外部引脚没有响应的信号接进来吧

使用特权

评论回复
13
stly| | 2021-5-5 22:11 | 只看该作者

给它一个触发条件 或者更改判定条件

使用特权

评论回复
14
pengf| | 2021-5-5 22:13 | 只看该作者
修改if语句的条件

使用特权

评论回复
15
supernan| | 2021-5-5 22:14 | 只看该作者
好像没有满足要求啊

使用特权

评论回复
16
songqian17| | 2021-5-5 22:16 | 只看该作者
C++编译的优化等级太高的缘故

使用特权

评论回复
17
zhanghqi|  楼主 | 2021-5-5 22:19 | 只看该作者

这是我整个函数的所有代码,单步仿真就只有读取麦克风和喇叭状态这部分的判断出现这个问题。
//从CX20709读取USB,麦克风,喇叭状态
void Read_Status(void)
{
        //读取USB状态
        while (!Rx)
        {
                IWDG->KR = 0xAA;
                Rx = I2CRcvStr(BQ24168_IIC_PORT, POW_SDA, POW_SCL, 0xd6, 0x00, CX20709, 2);  //   2
        }
        Rx = 0;

        if (((0x40 & CX20709[0]) == 0x40) || ((0x20 & CX20709[0]) == 0x20))
        {
                USB_Reg = 1;     //USB存在
        }
        else
        {
                USB_Reg = 0;     //USB不存在
                USB_Output = 1;  //USB拔出状态,没有检测到USB
        }
        

        //读取音量等级状态
        if (IRcvStr(GPIOB, SDA, SDL, 0x28, 0x12, 0xCE, &CX20709[4], 1))
        {
                if (IRcvStr(GPIOB, SDA, SDL, 0x28, 0x12, 0xCF, &CX20709[5], 1))
                {
                        Spk_Sign = (CX20709[5] << 8) | CX20709[4];
                }
        }
        
        //读取麦克风和喇叭状态
        while (!Rx)
        {
                IWDG->KR = 0xAA;
                Rx = IRcvStr(GPIOB, SDA, SDL, 0x28, 0x10, 0x18, &CX20709[3], 1);  //   2
        }
        Rx = 0;
        
        if ((0x01 & CX20709[3]) == 0x01)
        {
                Spk_Mute = 1;
        }
        else
        {
                Spk_Mute = 0;
        }

        if ((0x08 & CX20709[3]) == 0x08)
        {
                Mic_Mute = 1;
        }
        else
        {
                Mic_Mute = 0;
        }

        if (Spk_Mute == 1)
        {
                if (Mic_Mute == 1)
                {
                        flash = 2; //蓝灯红灯闪烁
                }
                else
                {
                        flash = 1; //蓝灯闪烁
                }
        }
        else
        {
                flash = 0;
        }
        
        //同时连接所有外设
        if ((Blu_Reg == 1) && (USB_Reg == 1))
        {
                Phone_Job = 3;
        }
        //只有蓝牙连接
        else if ((Blu_Reg == 1) && (USB_Reg == 0))
        {
                Phone_Job = 2;
        }
        //只有USB连接
        else if ((Blu_Reg == 0) && (USB_Reg == 1))
        {
                Phone_Job = 1;
        }
        //没有外设连接
        else
        {
                Phone_Job = 0;
        }
        
}

使用特权

评论回复
18
jiaxw| | 2021-5-5 22:21 | 只看该作者
这里优化等级如果设置太高,编译器会直接把函数优化掉:

使用特权

评论回复
19
午夜粪车| | 2021-5-5 22:23 | 只看该作者
还有函数中Rx好像不是位变量,那么Rx在判断为0值时应该写成while(Rx==0x00),而不应该是:while(!Rx)

使用特权

评论回复
20
午夜粪车| | 2021-5-6 22:26 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

11757

帖子

5

粉丝