Пользовательский класс для чтения / записи EEPROM - PullRequest
0 голосов
/ 28 сентября 2018

Я не могу понять, как читать / записывать в eeprom, используя следующий класс:

#include <avr/eeprom.h>
#include "myclass.hpp"

uint16_t arraySize = 0;
struct param {
    char name[10];
    char value[20];
};
std::vector<param> arrayOfParams;
std::vector<param>::iterator iterator;

MyClass::Myclass() {
    read(0, &arraySize, sizeof(arraySize));
};

void MyClass::reset() {
    arraySize = 0;
    uint16_t addr = sizeof(arraySize);
    write(0, &arraySize, addr);
    uint8_t buffer[16];
    memset(buffer, 0xFF, sizeof(buffer));
    while(addr < 1024) {
        eeprom_write_block(buffer, (void*)addr, sizeof(buffer));
        addr += sizeof(buffer);
    }
};

void MyClass::read(uint16_t from, void * result, uint16_t size) {
    byte * b = (byte*)result;
    for (uint16_t i = 0; i < size; i++) {
         *b++ = eeprom_read_byte(from++);
    }
};

void MyClass::write(uint16_t from, void * data, uint16_t size) {
    const byte * b = (const byte*)data;
    for(uint16_t i = 0; i < size; i++) {
        eeprom_write_byte(from++, *b++);
    }
};

Цель состоит в том, чтобы хранить «байты управления», которые содержат размер основного массива структур - arrayOfParams.Прежде всего, скрипт записывает в пространство байтов управления любое значение, кроме 0x00.Затем отказывается писать основную структуру arrayOfParams.

Есть идеи, что я делаю не так?

...