testerplus (06.04.2011 14:11, просмотров: 275) ответил fk0 на 26 - 25 = 1; 1 < 10L*2441/1000 ==> лажа.
Лаже не в вычитании и не в сравнении. btemp на каком-то этапе портится. По листингу так: while (timer() - t < (ftime_t)(10L*FTIME_PER_SEC/1000));
1. timer() - результат - в btemp (кстати, как было установлено, что последнее значение = 26?)
2. btemp = btemp - t - тут по листингу ничего странного, обычное вычитание
3. Сравнение (int16)btemp с (int16)24 - здесь тоже все корректно, обычное знаковое сравнение
Прерывание могло возникнуть в любой момент. В нем случайно нет вызова timer()? Там вообще btemp и btemp+1 числятся в списке сохраняемого контекста? PICC18 в некоторых случаях забывает это делать.