【发布时间】:2018-10-24 19:13:46
【问题描述】:
第一次使用 SO。所以,我在随意编码,我启动这个全局变量 rC 并将其设置为 0。rC 是一个计数器,但是当它需要它做自己的事情时,它会变得很糟糕。这是一些代码和输出(我正在编写 Doit ESP32)
DEBUGPRINTLN3("Sampled xC");
DEBUGPRINTLN3(xC);
rC = 0;
Serial.println("rC before increment");
Serial.println(rC);
if(rC == 204)
{
Serial.println("WTF");
rC = 0;
}
rC += 1;
dx = -dx;
xC = -xC;
if 语句是在我寻找问题根源时添加的(这个错误让我的整个程序变得疯狂,因为该计数器会发出一堆其他的信号,包括它自己的重置)
这是串行输出:
14:48:23.017 -> Sampled xC
14:48:23.017 -> 299
14:48:23.017 -> rC before increment
14:48:23.017 -> 204
14:48:23.017 -> WTF
14:48:23.017 -> xC:
14:48:23.017 -> -299
14:48:23.017 -> HAS REVERSED
14:48:23.017 -> rC INCREMENTED 1
14:48:23.017 -> 1
我使用的“修复”非常糟糕,如果我更改其他一些变量,它就不会起作用,但它可以解决这种情况。 知道是什么原因造成的吗?
如果有人想知道:只有 3 个其他实例更改了 rC,这是另一个 rC +=1 和 rC = 0(初始化和稍后重置)。在 rC+=1 附近没有 while 或 for 任何地方;除此之外,rC 只能读取,不能编辑。
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读the help pages、the SO tour、阅读how to ask good questions,以及this question checklist。最后学习如何创建Minimal, Complete, and Verifiable Example。
-
那里没有足够的代码来告诉你为什么会遇到这个问题 - 你需要将你的代码减少到重现问题的最小代码量,然后发布 所有剩下的代码供别人帮助你。 minimal reproducible example
-
MCVE 的真正美妙之处在于您很少需要将其带到结论中。通常,您会部分解决问题,并且降低的错误与代码噪声比使错误及其解决方案显而易见。如果你一直到 MCVE,你就会遇到一个非常巧妙的错误,或者误解了编译器将对你的代码做什么。无论哪种方式,如果您在没有使用像 MCVE 这样的分而治之的方法来隔离错误的情况下提出问题,那么您提出的问题太早了。
-
同意。下次我会这样做,谢谢。