Заявлений о "если" не последовало

Я занимаюсь небольшим программированием на 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()?

Другие вопросы по тегам