我有以下代码,一次运行3个步进器,步数n1
,n2
和n3
不同。如果按如下方式使用,它不会运行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--;
}
答案 0 :(得分:3)
if
块将按原样运行一次。循环的第一次迭代,n1
,n2
和n3
显然会分别具有初始值 - 0
,0
和100
。第二次迭代,n1
,n2
和n3
将分别具有值-1
,-1
和99
,因为您正在减少每个值它们在if
块之后。显然,第二次迭代n3 > 0 && n1 == 0 && n2 == 0
不是真的。
我们对你的直接问题的看法,经过你的评论证实,你不希望步数(n1
,n2
或n3
)为负数。使用n1
作为示例,当不大于或等于1时,不会减少步数 - 例如将 n1--;
更改为 if (n1 > 0) n1--;
。