Pokud jsem záměr použití pochopil správně, pak jsou to výchozí hodnoty, které AVR Studio hodí jako HEX do souboru s příponou .EEP při překladu a Ty je pak nahraješ do mcu spolu s vlastním programem. Uvědom si, že jakmile je programem přepíšeš, už je nevrátíš a hlavně - data jsou na různých pozicích paměti, tj. když v programu přepíšeš informaci na pozici X0, tak v XA ani v XB se NEZMĚNÍ - to si musí program ohlídat sám. V zařízení by ale bylo lepší, kdyby sis “tovární nastavení” do EEPROMky vygeneroval sám. Například načíst data z EEPROM a pokud jsou tam samý 0xFF (EEPROMka je smazaná) nebo nesmyslný data nebo pokud byl požadavek na defaultní nastavení vyvolán uživatelem, pak do EEPROM uložit defaultní data.
Druhá varianta je, že pokud ze 2 8-bitových hodnot skládáš 16-bitovou, můžeš použít toto :
Pak dostáváš XA=[X0,X1], XB=[X2,X3] (nebo správně XA=[X1…X0], XB=[X3,X2] - první byte je low, druhý high) . Tys měl XB=[X0,X2], proto to nešlo tak jednoduše. V tomhle případě pak jedním zápisem do X0 nebo X1 změníš vlastně i XA.
Jo, to je přesně to co jsem měl na mysli.
To že je vše v EEPROM “natvrdo” samozřejmě vím. Hodnoty takto definované se nikdy měnit nebudou, pouze případně ve Studiu. Jedná se v podstatě o něco jako ascii kody. X0 je byte písmenka a XA pak slovo sestavené z X0:Xx
Když už tam ta EEPROM je, tak proč jí takto nevyužít a zbytečně plácat programovou paměť
a definované hodnoty použiješ přímo v programu, místo toho, abys je četl z EEPROMky. Když víš, že potřebuješ hodnoty například X0:X5, tak místo, abys četl X0 a X5 z EEPROM a pak to šoupal třeba do XH:XL, tak v kódu napíšeš
ldi XL, Hodnota_X5
ldi XH, Hodnota_X0
Jsou to 2 instrukce a pokud nepoužíváš EEPROMku k uživatelskému nastavení a stejně jí přeprogramováváš v AVR Studiu, je zbytečné do programové paměti cpát rutiny pro čtení EEPROM. Konstrukce #define Hodnota_X0 0b10111110 je jenom informace pro překladač, v programové paměti nezabírá ani byte a změna hodnot v definicích se dělá úplně stejně, tak proč to nepoužít. Jediný rozdíl je v tom, že při přeprogramování nepřepisuješ programátorem EEPROMku, ale programovou paměť.
noo… tohle byl jen jako příklad. Těch ins. by muselo být 20 na každou zprávu. Takhle je jen těch 20 + čtení eeprom. Šlo by samozřejmě vše uložit do CSEG, ale zde se mi hodí každý kousek a navíc rychlost mě tolik netrápí a načítání uživ dat z eprom se používá také, takže čtení tam je tak i tak. To s tim #define je přesně vyhovující Díky moc