写入SD卡时,Arduino发出奇怪字符

写入SD卡时,Arduino发出奇怪字符,arduino,serial-port,sd-card,Arduino,Serial Port,Sd Card,我将SD卡连接到Arduino,然后通过串行方式与Visual studio通信。每样东西都可以独立工作,99%都可以集体工作。现在,如果我在安装程序中编写这段代码,一切正常。如果我将其弹出到一个函数中,该函数在从VisualStudio发送特定字符时调用,我会在底部得到奇怪的字符 我已经调试了代码的每一步,似乎没有任何异常,不幸的是,我不能像以前那样调试代码 1) 太长了。。。 2) 这是机密。。。 :( 我明白没有代码我无法得到一个完整的解决方案,但这些字符是什么!为什么在设置中它能完美地工

我将SD卡连接到Arduino,然后通过串行方式与Visual studio通信。每样东西都可以独立工作,99%都可以集体工作。现在,如果我在安装程序中编写这段代码,一切正常。如果我将其弹出到一个函数中,该函数在从VisualStudio发送特定字符时调用,我会在底部得到奇怪的字符

我已经调试了代码的每一步,似乎没有任何异常,不幸的是,我不能像以前那样调试代码 1) 太长了。。。 2) 这是机密。。。 :(

我明白没有代码我无法得到一个完整的解决方案,但这些字符是什么!为什么在设置中它能完美地工作,在函数中我能得到各种各样的随机性

    myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}
整瑳湩⁧ⰱ㈠‬⸳ࠀ -- 直接从文本文件复制

整瑳湩%E2%81%A7ⰱ㈠%E2%80%AC⸳ࠀ -- 粘贴到google时的输出


这是arduino到期日,是的,有很多“字符串”,包括我们用来上传到tft屏幕的4 x 2D字符串数组。我遇到了UNO的内存问题,但认为我们可以使用到期日,因为它有相当多的ram

好吧,这就是你的问题。我喜欢你用问号来结束这一切。:)拥有额外的RAM并不能保证调皮的
字符串
会正常工作,即使在内存为GB的服务器上也是如此。总结如下:

不要使用字符串™ 使用C字符串(即字符数组)的解决方案非常有效。如果您不确定如何将
字符串
用法转换为字符数组,请发布代码片段。你会得到很多帮助

String
将为程序大小添加至少1600字节的闪存,并为每个字符串变量添加10字节。虽然
String
非常易于使用和理解,但随着程序运行时间的延长和/或大小和复杂性的增加,它也会导致随机挂起和崩溃。这是由于堆管理例程
malloc
free
造成的

网上其他地方的系统专家评论:

  • 我的

哪个Arduino?您使用的是
String
new
malloc
realloc
还是这样的库?这闻起来像是内存损坏,这可能是由许多因素引起的:动态内存、指针错误,或者,你在这里的同名原因,堆栈溢出。和往常一样,arduino到期的代码段没有问题,是的,有很多“字符串”,包括我们用来上传到tft屏幕的4 x 2D字符串数组。我在UNO上遇到了内存问题,但我认为我们可以使用DUE,因为它的ram要多得多?
可能是一个unicode字符。你如何处理它们?(UTF-16/UTF-8/根本没有)?@datafiddler目前根本没有。然而,奇怪的是,它在设置期间工作正常,但在循环期间却不工作。在使用示波器进行进一步测试后,arduino似乎有时会向SD卡写入低位数据并传输数据,但大多数情况下不会。这并不能解释这些奇怪的角色,但它可能一路被腐蚀?