C Arduino nano:内存稳定性问题

C Arduino nano:内存稳定性问题,c,arduino,C,Arduino,目前,我正在与Arduino nano合作。当我在ArduinoIDE中编译c代码时,我得到了以下错误 程序上传成功,工作正常,那么这个错误的原因是什么?它真的会影响arduino nano的性能吗 它真的会影响arduino nano的性能吗 我在编译时也遇到了相同的错误,这是一个警告,正如您所说,上传成功,如果上传成功,则没有性能问题。如果要清除此错误,需要减少代码的内存使用量, 只需优化代码,尽可能多地使用局部变量。另外,如果您有常量,请使用#define, 将重复调用分组到函数中。出现

目前,我正在与Arduino nano合作。当我在ArduinoIDE中编译
c
代码时,我得到了以下错误

程序上传成功,工作正常,那么这个错误的原因是什么?它真的会影响arduino nano的性能吗

它真的会影响arduino nano的性能吗

我在编译时也遇到了相同的错误,这是一个警告,正如您所说,上传成功,如果上传成功,则没有性能问题。如果要清除此错误,需要减少代码的内存使用量, 只需优化代码,尽可能多地使用局部变量。另外,如果您有常量,请使用
#define

将重复调用分组到函数中。

出现此警告是因为编译器不知道程序应分配多少动态内存。请看你的程序在动态分配,局部变量分配

它真的会影响arduino nano的性能吗

就像它所说的“可能会出现稳定问题”。我在过去确实遇到过这种情况,而且项目有时会滞后运行

int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
调用此函数,例如Serial.println(freeRam());在你的职能的最深处,或者在你想去的任何地方

Serial.println(freeRam());

不使用MalCube(或C++)新来避免“稳定性问题”,因为在动态内存分配中没有异常处理或其他错误检查。正如上面提到的,

> P>,这只是一个警告,但是根据实际内存使用,您可能会得到不稳定的行为。 我最近做了一个小项目(),根据剩余的动态内存,观察到不同的行为,例如:伺服不工作、屏幕显示不正确和/或激光读数不准确


从70%使用开始,您将收到警告。实际行为取决于。

编译器无法知道运行时堆栈上的局部变量、函数参数和返回地址所需的空间。如果空间不够的话,这些将毫无顾忌地干扰全局变量。产生完全不可预测的结果。这是关于没有足够的空间(主要是没有足够的堆栈空间)让程序正常运行的“可能性”的警告,您可以通过创建非常广泛而不是非常深入的软件体系结构来极大地帮助程序正常运行。通常,F宏消除了大部分不必要的RAM损坏。Serial.println(F(“任何常量文本都可以从宝贵的RAM中保留”);不要忘记字符串对象,它需要更多的空间并使用动态内存,因此结合了两个不稳定的原因。>如果有常量,请使用#define…或使用const关键字。类似的优化效果,但const保留了数据类型信息。