uložení/čtení struktury pouze v EEPROM

Zdravím,
chtěl bych požádat někoho o radu. Potřebuji ukládat do EEPROM AVRka pole hodnot. Jmenovitě jde o souřadnice

[code]typedef struct coord_s {
uint8_t mA;
uint8_t mB;
uint16_t mC:10;
uint16_t mD:10;
uint16_t mE:10;
uint16_t mF:10;
}coord_s;

struct ee_storage_s {
coord_s coord[50];
};

struct ee_storage_s EEMEM ee_storage = {{0}};
const coord_s new = {10,20,30,40,50,60};[/code]

nadefinoval sem strukturu souřadnice, stukturu eeprom, “zaalokoval” pamět v EEPROM a teď bych potřeboval jednotlivé souřadnice do EE vkládat, a případně je číst s tím že budu mít vytvořené v RAM jen vždy tu podstrukturu, čili tu souřadnici do které si bud uložím nebo z ní načtu

struct ee_storage_s *p = &ee_storage; eeprom_write_block(&new, p->coord[0], sizeof(coord_s));

Jde provést něco takového ? Celou strukturu ee_storage si v SRAM vytvářet nechci.
Díky

Pozor na slovo “new”, v C to sice nevadí, ale v C++ je to rezervované slovo.

Zápis souřadnic “new” na pozici s daným indexem:

eeprom_write_block(&new, &ee_storage.coord[index], sizeof(coord_s));

Já už včera vymejšlel slušný ptákoviny. Díky za radu

V libc je snad funkce typu memcpy(uint8_t *dest, uint8_t *souce, uintx_t size). Stačí jí předhodit adresy obou struktur a je vyřešeno.

Kdyby ne, šlo by to principialně nějak takto:[code]coord_s coordRamTmp;

for (i=0; i<sizeOf(coord_s); i++) // copy struct
{
((uint8_t )(&coordRamTmp)) = pgmReadByte( ((uint8_t )(&araayInEE[indexPozadovaneStruktury])) );
}[/code]Číst i zapisovat z/do eeprom můžeš po bytech tak, že získáš adresu struktury, přetypuješ na (uint8_t ) nebo (uint16_t) (první je pointer, druhé holá adresa) a předáš funkci pro práci s eeprom (podle toho, zda funkce potřebuje pointer nebo jen adresu).*