arduino - 将字符串写入 Arduino ESP32 的永久闪存

标签 arduino esp32 flash-memory eeprom

我想将一些文本写入 Arduino ESP32 的闪存中。它有点工作,但不是我想要的。

void writeString(const char* toStore, int startAddr) {
  int i = 0;
  for (; i < LENGTH(toStore); i++) {
    EEPROM.write(startAddr + i, toStore[i]);
  }
  EEPROM.write(startAddr + i, '\0');
  EEPROM.commit();
}

我的电话

writeString("TEST_STRING_TO_WRITE", 0);

只将 TEST 写入内存。我不懂为什么。那是因为_?还是我错过了一些不同的东西?

这里是使用的 LENGTH 宏

#define LENGTH(x) (sizeof(x)/sizeof(x[0]))

以及我用来再次从内存中读取字符串的方法(似乎可以正常工作):

String readStringFromFlash(int startAddr) {
  char in[128];
  char curIn;
  int i = 0;
  curIn = EEPROM.read(startAddr);
  for (; i < 128; i++) {
    curIn = EEPROM.read(startAddr + i);
    in[i] = curIn;
  }
  return String(in);
}

最佳答案

你到底从哪里得到那个 LENGTH 宏的?这是超现实的。

sizeof 不会做你想做的。它是一个编译时函数,用于计算其参数的存储要求。在这种情况下,它应该返回字符指针的字节长度,而不是它指向的字符串。

你想使用 strlen(),假设你的 char* 是一个正确终止的 C 字符串。添加一个以确保末尾的“\0”也被存储。

#define LENGTH(x) (strlen(x) + 1)

关于arduino - 将字符串写入 Arduino ESP32 的永久闪存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139657/

相关文章:

c++ - Arduino代码错误,用户输入的LED闪烁

c - Arduino 中的空字符数组

java - 是否可以仅显示已配对、开启且在范围内的蓝牙设备的 Activity 列表,而不是显示所有先前配对的设备?

flash - 如何将数据存入ESP32的Flash中?

c - 将 rodata 与创建它的函数一起定位

microcontroller - NAND闪存编程: granularity of writes?

c# - 如何通过蓝牙从 Unity C# android 应用程序向 Arduino 发送字符串?

c++ - esp32_cam读取并处理镜像

c++ - UDP 客户端不在 esp32 上广播消息

linux - 有没有办法创建虚拟 Linux MTD 设备,模拟一个用于实验