C: простой код не работает должным образом - PullRequest
2 голосов
/ 26 июня 2011

Эта строка не работает должным образом:

uartPushPos = (uartPushPos + 1) % UART_TX_BUFF_LENGTH;

Однако это ниже, что в теории делает то же самое, работает:

//if (uartPushPos == UART_TX_BUFF_LENGTH - 1){
if (uartPushPos >= UART_TX_BUFF_LENGTH - 1){
    uartPushPos = 0;
} else {
    uartPushPos++;
}

UartPopPos является типом char, иUART_TX_BUFF_LENGTH - это переменная препроцессора, установленная на 16.

Почему работает второй сегмент кода, а не первый?

Если это имеет большое значение, я использую компилятор SourceBoost BoostCдля микроконтроллера PIC 16f.

спасибо

1 Ответ

4 голосов
/ 26 июня 2011

Они отличаются, если uartPushPos меньше 0 или если оно больше или равно UART_TX_BUFF_LENGTH.

См. Также Мод отрицательного числа тает мой мозг

...