C ++ ESP8266返回对由EEPROM.get填充的对象的引用

问题描述

我遇到了一些我无法理解的奇怪事情:

#include <EEPROM.h>

struct Settings {
  char stringy[24] = "initial";
};

void setup() {
  Serial.begin(74880);
  EEPROM.begin(100);


  Settings s;
  strncpy(s.stringy,"a string",sizeof(s.stringy));

  EEPROM.put(0,s);

  Settings s3 = readSettings();
  Serial.println(s3.stringy);
}

Settings& readSettings() {

  Settings s2;
  Serial.println(s2.stringy);
  EEPROM.get(0,s2);

  delay(1);

  return s2;
}

void loop()
{
  
}


EEPROM的实现是这样的:https://github.com/esp8266/Arduino/tree/master/libraries/EEPROM

显示当前代码

initial
a string

但是,如果我评论delay(1),则它将打印

initial
initial

什么? delay(1)似乎可以用其他任何语句代替。

这是怎么回事?这种奇怪的异步行为来自何处?

如果我让readSettings返回一个Settings对象而不是Settings&,那么问题也就消失了。

我很困惑,我在这里想念什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)