这是我的代码的一个例子,我可以放置if条件来检查While条件标志,并在正文的每一行之后放置break,但这会增加开销。我该怎么办??????
while(!((kvp < (Motor_pos+2)) && (kvp > (Motor_pos-2))) ){
if ( (kvp > (Motor_pos+2))){
// Relay_75 = LOW;
while (kvp > (Motor_pos+2)) {
VAR_CW = HIGH; // M1 - Red LED
VAR_CCW = LOW; // M2 - Orange LED
for(uint8_t i=0; i < 5 ; i++){
ADC_s = ADC_s + Read_VAR();
}
Motor_pos = ADC_sum/5;
ADC_sum =0;
// UART_Write( Motor_pos);
__delay_ms(50);
}
break;
}
else if ((kvp < (Motor_pos-2))){
// Relay_100 = LOW;
while (kvp < (Motor_pos-2)) {
VAR_CW = LOW; // M1 - Red LED
VAR_CCW = HIGH; // M2 - Orange LED
for(uint8_t i=0; i < 5 ; i++){
ADC_s = ADC_s + Read_VAR();
}
Motor_pos = ADC_s/5;
ADC_s =0;
// UART_Write( Motor_pos);
__delay_ms(50);
}
break;
}
else break;
}
Motor_pos = 0;
ADC_s = 0;
VAR_CW = LOW; // M1 - Red LED
VAR_CCW = LOW; // M2 - Orange LED
您的逻辑有几个问题,而且您的代码的意图是什么也不明显。这是对逻辑细节的简化:
while (a || b) {
if (a) {
while (a) {
do something a;
}
break;
} else if (b) {
while (b) {
do something b;
}
break;
} else {
break;
}
}
会转变为:
if (a) {
while (a) {
do something a;
}
} else if (b) {
while (b) {
do something b;
}
}
所以你真的需要先专注于你的简化步骤,然后才是其他的。