繁体   English   中英

if和else if条件是否在while循环内

[英]if and else if conditons inside a while loop

我有以下代码,可一次运行3个步进器,并使用不同数量的步骤n1n2n3 如果按以下方式使用,它不会运行n3电机,但是如果我们去除if条件,它将运行。

int n1 = 0;
int n2 = 0;
int n3 = 100
while (n1 > 0 || n2 > 0 || n3 > 0) {
    if (n3 > 0 && n1 == 0 && n2 == 0) {
        current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
        new_port_value = (current_port_value & ~0X02);
        XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
        current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
        new_port_value = (current_port_value | 0X04);
        XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
        current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
        new_port_value = (current_port_value | 0X08);
        XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
        current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
        new_port_value = (current_port_value | 0X40);
        XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
        current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
        new_port_value = (current_port_value | 0X80);
        XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
        for (Delay = 0; Delay < LED_DELAY; Delay++);
        current_port_value = XGpio_DiscreteRead(&GpioOutput, LED_CHANNEL);
        new_port_value = (current_port_value & ~0X80);
        XGpio_DiscreteWrite( & GpioOutput, LED_CHANNEL, new_port_value);
        for (Delay = 0; Delay < LED_DELAY; Delay++);
    }
    n1--;
    n2--;
    n3--;
}

if块将按原样运行一次。 循环的第一次迭代n1n2n3显然将对它们的初始值- 00 ,和100分别。 第二个迭代n1n2n3将分别具有值-1-199因为您要在if块之后递减每个值。 显然,然后在第二次迭代中n3 > 0 && n1 == 0 && n2 == 0是不正确的。

根据您的评论,我对您眼前的问题的看法是,您不希望步骤数( n1n2n3 )为负数。 n1为例, 当步数不大于1时不要简单地减少步数–例如,更改 n1--; if (n1 > 0) n1--;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM