我有一个相当大的 Arduino 草图,它正在推动处理器上可用内存的极限。正如我正在释放内存并尽可能减少对全局变量的使用一样。我正在使用MemoryFree.h
(可以在此处找到详细信息)来检查可用内存。我有一个工作草图(在这里发布太长),但是当我添加另一个带有一些变量的函数(在我认为可用内存范围内)时,我的系统由于没有内存而崩溃或停止。
我添加了以下功能:
boolean moved(){
int yreadings[4];
int zreadings[4];
free(&yreadings);
free(&zreadings);
}
然后我将以下代码添加到我的主循环中:
Serial.print("Mem is ");
Serial.println(freeMemory());
moved();
如果moved()
在循环中并且下面的整个函数被注释掉,我会得到一个输出
Mem is 499
在每次迭代中,表明每次迭代都不会丢失内存。
然而,如果我取消注释函数并调用它,我会得到以下输出:
Mem is 499
Mem is -16094
在崩溃之前的第一行和第二行...
即使内存是持久的,这不应该只使用比每次迭代的全部 499 字节少得多吗?不过,我怎么会失去任何记忆?
更新:更奇怪的是:如果我删除了moved()函数并全局声明整数数组,我仍然会得到499的内存读取。这是怎么回事?不应该减少24个整数消耗的内存量吗?