Ukladani/nacitani dat z/do EEPROM
Moderátor: Moderátoři
Ukladani/nacitani dat z/do EEPROM
..potreboval bych poradit jak ukladat nebo cist data do EEPROM za provozu.
KOnkretne mam vztvorenou structuru Profil, ktera obsahuje (nazev a 4 parametry)....a tu bych potreboval prekopirovat do EEPROM .....
Hodil by se nejaky priklad v Cecku pro EEPROM v ATMEGA16.
diky
mam vytvorenou strukturu NEWp ktera obsahuje {pole1[9];pole2[1];pole3[2]; 2x promenna typu double} napocital sem 31 BYTU
...pouzil sem nasledujici makro:
eeprom_write_block((void*)&NEWp, (const void*)5, 31);
podle toho co sem nastudoval by to melo prekopirovat celou strukturu do eeprom ale nefunguje to... nakopiruje se jen obsah pole1 a dal uz je to pomatene
obdobna strukturu v eeprom zrejme vytvorit nejde nebo ano?
Jak byste to resili??
Dik za radu
Vypadalo to nějak takhle:
void long_save(long long_name, unsigned int eeprom_addr)
{
unsigned char* ukazatel;
unsigned char i;
i=0;
ukazatel = (unsigned char*)&long_name; //save
// prekopiruje bajt po bajtu do pole
for (i=0;i<4;i++)
{
eeprom_write_byte((unsigned char *)(eeprom_addr+i),*(ukazatel+i));
}
}
V assembleru si všechno musíš hlídat, ale zase to máš všechno pod palcem.
Závěr: Použij nějaké jednoduché proměnné (byte, word, pole), u kterých je to uložení v paměti (snad) známé a ukládej každou takovou proměnnou zvlášť.
frontm4n píše:Jeste by me zajimalo jak poresit aby pri prvnim spusteni prazdne profily neobsahovali nejake zmatene znaky,ale aby tam bylo napriklad <empty> a az se vytvori nejaky profil tak aby se uz nacetli pozadovane hodnoty.
Řešení je asi mnoho. Fungovat by to mohlo na principu kontrolního součtu. Tedy mít vyhrazený jeden byte v eeprom právě pro CRC a při spuštění kontrolovat správnost. Jednodušší, ale né stoprocentní metoda je místo CRC bytu v eeprom mít jen nějaký příznakový byte, do kterého se po načtení správných "profilových" hodnot uloží nějaké specifické číslo. Je-li tam po špuštění jíné číslo(obdoba špatného crc), tak brát hodnoty v eeprom jako "empty"...