C 不解析数组第一个元素 - AVR GCC

标签 c avr-gcc

代码非常简单,我存储最后 10 个值并输出平均值。 但是,数组的 0 元素保持不变,初始值为“0”。

long int avg[10] = {0,0,0,0,0,0,0,0,0,0};
int i;
float temp2;

for (i=0;i<9;i++){
   avg[i] = avg[i+1];    //shift all values to the left
}
avg[9] = temp2;          //temp2 is the last value

temp2 = 0;               //i am reusing temp2 as mean result

for (i=0;i<10;i++){
   temp2 += avg[i];
}

temp2 /= 10;

通过将结果除以 9,该值得到纠正,但这纯粹是一种解决方法,我想知道为什么会发生这种情况。

谢谢

编辑:

假设我的 adc 读取的值接近 250。 在第一次运行中,值从右到左添加到数组中:

0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   251
0   0   0   0   0   0   0   0   251 252
0   0   0   0   0   0   0   251 252 248

等等

虽然经过多次运行后,值应该填满表格,但表格始终具有以下形式:

0  251  252  248  250  247  253  252  248  247

我希望我说得更清楚

--编辑2:

你为什么对我的问题投反对票?是因为你不明白吗? 哪个严肃的编译器会编译它而不出现错误/警告我没有初始化 temp2 以及由于这个原因出现这个问题的概率到底是多少?

最佳答案

您尚未初始化int temp2。这就是为什么你会得到这样的结果。

int temp2 = 0;
avg[9] = temp2;

关于C 不解析数组第一个元素 - AVR GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089252/

相关文章:

c - 终端输入串口命令,输出Arduino Tx

C 预处理器获取带串联的选项列表

c - gcrt1.S :195: multiple definition of `__bad_interrupt'

c++ - 我可以在特定部分中放置完整的命名空间吗?

c - 进程如何知道信号灯可用

c - C 中的用户输入变量值

c - argv[argc] 是否等于 NULL 指针

c - 如何在 C 语言中分隔括号之间的术语并列出它们

c - C中如何通过指针调用函数

c++ - avr-gcc 上的自动释放