Сделал функции записи и чтения в EEPROM.
Читаю ранее записанные пользовательские данные в классе, где описана в хэдере массив uint64_t eeprom_usr_data[WFSC_UDCOUNT_], где WFSC_UDCOUNT_ назначена 2.
вывод данных в serial показывает, что данные читаются верно (0x0000003f и 0x00000000), а вот записывает конретную чушь (0x4020e7f4 и 0x4020e7f4)
Получается
не верно отрабатывает? Или я не умею их готовить?
C++:
uint16_t eeprom_addr = 0;
uint16_t eeprom_len = 0;
uint16_t eeprom_crc = 0;
void _write_(void* ptr, uint8_t ptrsize) {
while (ptrsize > 0) {
uint8_t c = *(uint8_t*)(ptr);
EEPROM.put(eeprom_addr, c);
eeprom_crc += c;
if ((eeprom_addr & 0x0F) == 0) Serial.printf_P(PSTR("\r\n%4.4x :"), eeprom_addr);
Serial.printf_P(PSTR(" %2.2x"), c);
ptr += 1;
eeprom_addr++;
ptrsize--;
}
//Serial.printf(c_dbg_addr, eeprom_addr );
}//void _write_( void* ptr, uint8_t ptrsize)
void _read_(void* ptr, uint8_t ptrsize) {
while (ptrsize > 0) {
uint8_t c; EEPROM.get(eeprom_addr, c);
Serial.printf_P(PSTR(" addr: %x "), ptr);
*(uint8_t*)(ptr) = c;
if ((eeprom_addr & 0x0F) == 0) Serial.printf_P(PSTR("\r\n%4.4x :"), eeprom_addr);
Serial.printf_P(PSTR(" %2.2x"), c);
eeprom_crc += c;
ptr += 1;
eeprom_addr++;
ptrsize--;
}
//Serial.printf(c_dbg_addr, eeprom_addr );
}//void _read_( void* ptr, uint8_t ptrsize)
Читаю ранее записанные пользовательские данные в классе, где описана в хэдере массив uint64_t eeprom_usr_data[WFSC_UDCOUNT_], где WFSC_UDCOUNT_ назначена 2.
C++:
void TestClass::readEEPROM()
{ void* ud_ref = (void*)eeprom_usr_data;
Serial.printf_P(PSTR("usr_data * %x\r\n"), ud_ref);
Serial.printf_P(PSTR("usr_data size %d\r\n"), sizeof(eeprom_usr_data[0]) * WFSC_UDCOUNT_);
_read_(eeprom_usr_data, sizeof(eeprom_usr_data[0])* WFSC_UDCOUNT_);
Serial.printf_P(PSTR(" eeprom_usr_data:"));
for (uint8_t i = 0; i < WFSC_UDCOUNT_; i++)
Serial.printf_P(PSTR("[%d]%x "), i, eeprom_usr_data[i]);
Serial.println("");
}
Код:
10:10:14.930 -> usr_data * 3ffeeab8
10:10:14.930 -> usr_data size 16
10:10:14.930 -> addr: 3ffeeab8 3f addr: 3ffeeab9 00 addr: 3ffeeaba 00 addr: 3ffeeabb 00 addr: 3ffeeabc 00 addr: 3ffeeabd 00 addr: 3ffeeabe 00 addr: 3ffeeabf 00 addr: 3ffeeac0
10:10:14.930 -> 0030 : 00 addr: 3ffeeac1 00 addr: 3ffeeac2 00 addr: 3ffeeac3 00 addr: 3ffeeac4 00 addr: 3ffeeac5 00 addr: 3ffeeac6 00 addr: 3ffeeac7 00 eeprom_usr_data:[0]4020e7f4 [1]4020e7f4
*(uint8_t*)(ptr) = c;
не верно отрабатывает? Или я не умею их готовить?