Оператор, выполняемый циклом while, является составным оператором внутри фигурных скобок. Точка с запятой - это просто пустое утверждение. Вы могли бы написать этот цикл как:
while ((R_SPI2SR & B_SPIF) != B_SPIF)
SERIAL_SERVICE_WDOG;
, поскольку составной оператор содержит только один оператор или как
while ((R_SPI2SR & B_SPIF) != B_SPIF)
{
SERIAL_SERVICE_WDOG;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;
что, конечно, ужасный стиль.
Пустой оператор используется, когда у вас есть цикл, который не нуждается в теле.
/* Throw away remaining characters up to the end of line. */
while ( ( c = getchar() ) != '\n')
;
Вы хотите следить за классической ошибкой преждевременного завершения цикла:
int i = 1;
int j = 1;
while ( i < 10 ); /* The semicolon here ends the loop... */
j *= i++; /* ... so this statement is only executed once. */
Ненужные точки с запятой просто беспорядок, поэтому вы никогда не должны их использовать.