2

这条线没有按预期工作:

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 的预处理器变量。

为什么第二个代码段有效,但第一个无效?

如果它有很大的不同,我正在为 PIC 微控制器 16f 使用 SourceBoost BoostC 编译器。

谢谢

4

1 回答 1

4

uartPushPos如果小于 0,或者大于或等于 ,它们是不同的UART_TX_BUFF_LENGTH

另见负数的 Mod 正在融化我的大脑

于 2011-06-26T13:53:18.390 回答