c++ - 将 Char 写入 Arduino EEPROM
问题描述
我在将数据传递到 EEPROM 时遇到问题。它似乎不接受 char 变量。我正在做这里所说的:https ://www.arduino.cc/en/Reference/EEPROMPut
所以我的这是我的对象结构
struct DeviceDataObject {
bool flag;
char data[20];
char data2[20];
int rate1;
int rate2;
int rate3;
};
所以当我测试时:
int RATES[3] = {300, 1500, 3600};
DeviceDataObject new_data = {true, "Data1Sample", "Sample2", RATES[0], RATES[1], RATES[2]};
WRITE_Device(new_data);
这是我的写作功能
void WRITE_Device(DeviceDataObject data) {
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
int eeAddress = 0;
float f = 123.456f; //Variable to store in EEPROM.
EEPROM.put(eeAddress, f);
eeAddress += sizeof(float); //Move address to the next byte after float 'f'.
EEPROM.put(eeAddress, data);
//Serial.println("Memory Data Updated");
}
一切似乎都很好。但是,如果我用变量替换"Data1Sample"
和"Sample2"
,EEPROM 的数据似乎被错误地更改了。
void ChangeValue(String value) {
int RATES[3] = {300, 1500, 3600};
char charBuf[20];
value.toCharArray(charBuf, 20); //Convert to char
DeviceDataObject new_data = {true, "", {charBuf}, RATES[0], RATES[1], RATES[2]}
WRITE_Device(new_data);
}
可能是什么错误?
解决方案
看起来像指针问题,试试这个
void ChangeValue(String value) {
int RATES[3] = {300, 1500, 3600};
DeviceDataObject new_data = {true, "", "", RATES[0], RATES[1], RATES[2]}
value.toCharArray(new_data.data2, 20); //Convert to char
WRITE_Device(new_data);
}
(您正在创建一个字符串,其中第一个字符是指向堆栈变量 charBuf 的指针,而不是复制字符串)
推荐阅读
- node.js - 如何使用 API Gatewat $connect 和 $disconnect 路由在本地调用我的 lambda,以便调试它们?
- python - HuggingFace Trainer 分割错误
- docker - Docker 多架构镜像是否对每个架构都有相同的镜像 ID?
- php - 保存重新发送功能的电子邮件参数 - Laravel
- java - 将文件上传到s3存储桶后如何从进程中释放文件
- python - 返回和传递cv向量KeyPoint c++ python
- search - 从整数值 10 中搜索数字
- laravel - 考虑 laravel 验证器数字规则的语言环境(分隔符)
- r - 将 renv 用于私有 GitLab 包
- sql - Flyway Migrate [SQL] - 处理对象依赖项