Заявлений о "если" не последовало
Я занимаюсь небольшим программированием на C с помощью dsPIC, я обнаружил небольшую крошечную проблему, которую я не знаю, почему и как это происходит. Компилятор C30 для MPLAB
У меня есть этот код:
int Function1(){
.
.
.
while(1){
.
.
.
P1 = EPC96_1[18]; //Here the value of P1 = 0xB6
P2 = EPC96_1[19];
CRC_CCITT(EPC96_2, 18); //in this function CRC_1 is calculated also CRC2
if(P1 != CRC_1){ //In the calculation of CRC_1 it comes always 0xB6
P1++; //Both values P1 and CRC1 are the same, stil it
if(P2 != CRC_2) //comes here and continues with the break
break;
}
}
return 1;
}
//end of my function, return to main code
---- Извините, я не уточнил, он не должен входить в !=
Это должно быть так, потому что я хочу, чтобы программа работала, когда обе переменные равны, она должна вернуться к while(1)
Начните.----
Я посмотрел на переменные в Watch of the MPLAB (8.92), и они совпадают. Я не думаю, что проблема в коде до или после или в любом другом месте, но я могу ошибаться. Кто-нибудь обнаружил такую же проблему во время вашего опыта?
Спасибо за ваше время.
2 ответа
При условии, что P1
а также CRC_1
являются int
переменные.
Согласно комментариям в вашем коде, обе переменные будут иметь значение 0xB6
, if
проверки на неравенство (!=
), а не равенство (==
), поэтому он пропустит блок.
Я предлагаю вставить printf()
-выставления для вывода значений двух переменных до и / или внутри if
-заявление. Может случиться так, что любой из них имеет неожиданные значения.
printf("P1=%d, CRC_1=%d\n", P1, CRC_1);
Тип данных переменных неизвестен. Какой тип данных P1, P2, EPC96_1, CRC_1, CRC_2? Где переменная определяется? Что делает функция CR_CCCITT()?