我有一个简单的功能

#define AMB_FILTER 0.7f

int32_t fValue; (this is declared in the class header)

int32_t Ambient::filter(uint32_t raw)
{
    // If we have no preliminary fValue we don't need to calculate a filter
    if(fValue == -1)
    {
        fValue = raw;
        return fValue;
    }

    float y, yy;

    y = (1.0f - AMB_FILTER) * (float) raw;
    yy = AMB_FILTER * (float) fValue;

    fValue =  (int32_t) (y + yy);

    printf("filter raw %d y %f yy %f fValue %d\n",raw, y, yy, fValue);

    return fValue;
}


它接受从smbus读取的值,并返回使用接收到的最后一个值过滤的值。这是printf语句的输出

filter raw 454 y 136.200012 yy 317.799988 fValue 454
filter raw 454 y 136.200012 yy 317.799988 fValue 454
filter raw 454 y 136.200012 yy 317.799988 fValue 454
filter raw 455 y 136.500000 yy 317.799988 fValue 454
filter raw 455 y 136.500000 yy 317.799988 fValue 454
filter raw 455 y 136.500000 yy 317.799988 fValue 454
filter raw 455 y 136.500000 yy 317.799988 fValue 454
filter raw 455 y 136.500000 yy 317.799988 fValue 454
filter raw 454 y 136.200012 yy 317.799988 fValue 454
filter raw 455 y 136.500000 yy -731751040.000000 fValue -731750912
filter raw 455 y 136.500000 yy -512225632.000000 fValue -512225504
filter raw 455 y 136.500000 yy -358557856.000000 fValue -358557728
filter raw 455 y 136.500000 yy -250990400.000000 fValue -250990256
filter raw 454 y 136.200012 yy -175693184.000000 fValue -175693040


那到底是怎么回事?它仍然收到相同的输入,但是突然变得疯狂了怎么办?除了此功能,我没有在任何地方设置fValue。

我将这些变量(y和yy)非常内部化到该函数中,因为我担心它们会以某种方式被修改或与其他内容发生冲突。但是,既然它们完全是本地的,我不知道发生了什么。我正在使用C ++类,因此无论如何都应该放在自己的空间中。

编辑:实际上,如果我让它运行更长的时间,我为不同的i2c芯片地址保留的变量也会损坏为-1075766188。我勒个去?

最佳答案

[t1] filter raw 454 y 136.200012 yy 317.799988 fValue 454
[t2] filter raw 455 y 136.500000 yy -731751040.000000 fValue -731750912

  


在t1和t2之间的某个时间,fValue的值已损坏。 yy的损坏是fValue损坏的结果。在程序的其他地方查找罪魁祸首。


如果您不能使用valgrind,则在整个程序中对fvalue的值进行完整性检查。
在例程中打印this的值。看看它是否变得异常。
Ambient打印其他成员变量的值。看看它们是否变得异常。
尝试注释掉大量的代码。从程序的1/2开始。如果错误仍然存​​在,请注释掉其余的1/2。继续,直到找到控制损坏的一行。


至于它是如何损坏的,有很多可能性。也许您在某个地方取消引用了野生指针。也许您写的内容超出了数组的末尾。也许您正在使用先前已破坏的Ambient

关于c++ - i2c smbus过滤器函数损坏变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13310496/

10-13 06:55