Столкнулся (уже не первый раз) с неприятной особенностью MSPGCC в части работы с переменными типа char. при подсчёте контрольной суммы пакета иногда возникают сбои.
Код
static char volatile Uart0Buffer[8];
static unsigned char Csumm;
...
Csumm=1;
for (i=0;i<6;i++)
{
Csumm += ~Uart0Buffer[i]; // вычисление контр. суммы
}
if(!((Uart0Buffer[6]-Csumm) & 0xff)) // контр. сумма верна и вообще
Последнее условие раньше выглядело if(Uart0Buffer[6] == Csumm) и работало через раз, пока не наложил байтовую маску. Такие вот дела.
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)