====== EEPROM ======
W układzie znajdują się 3 rodzaje pamięci:
* Ulotna RAM do odczytu i zapisu
* Nieulotna FLASH tylko do odczytu
* Nieulotna EEPROM do odczytu i zapisu (ale wielokrotnie wolniejsza niż RAM i działa tylko do około 100,000 operacji zapisu)
W pamięci EEPROM możemy zapisywać pomiary i ustawienia. Wykorzystamy nagłówek: #include
W którym znajdują się prototypy następujących funkcji:
uint8_t eeprom_read_byte (const uint8_t *addr)
void eeprom_write_byte (uint8_t *addr, uint8_t value)
uint16_t eeprom_read_word (const uint16_t *addr)
void eeprom_write_word (uint16_t *addr, uint16_t value)
void eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n)
void eeprom_write_block (void *pointer_eeprom, const void *pointer_ram, size_t n)
===== EEMEM =====
Wcześniej pisałem o ''PROGMEM'' dotyczącym pamięci FLASH, tutaj analogicznie użyjemy ''EEMEM''.
uint8_t EEMEM NonVolatileChar;
uint16_t EEMEM NonVolatileInt;
uint8_t EEMEM NonVolatileString[10];
int main(void)
{
uint8_t SRAMchar;
uint16_t SRAMint;
uint8_t SRAMstring[10];
SRAMchar = eeprom_read_byte(&NonVolatileChar);
SRAMint = eeprom_read_word(&NonVolatileInt);
eeprom_read_block((void*)&SRAMstring, (const void*)&NonVolatileString, 10);
eeprom_write_block((const void*)&NonVolatileString, "123456789", 10);
}
Uwaga! Jeżeli definiujemy początkowe wartości zmiennych w pamięci EEPROM to musimy pamiętać o zaprogramowaniu również pliku wynikowego dla pamięci EEPROM (nie tylko FLASH) W Eclipse: __Project->Properties->AVR->AVRDude->Flash/EEPROM->Upload EEPROM Image__ zaznaczamy __from build__
====== Bootloader ======
Układy AVR posiadają możliwość programowanie poprzez bootloader (od [[wppl>Bootstrap_(informatyka)|Bootstrap]]) czyli program rozruchowy. Możemy napisać program który zostanie umieszczony na końcu pamięci FLASH oraz ustawić odpowiednie fusebity które pozwalają ustawić wektor przerwania reset z początku pamięci programu do adresu pod którym znajduje się nasz bootloader. Taki fragment kodu posiada specjalne uprawnienia: może zapisywać pamięć FLASH! Istnieją pewne ograniczenia np. bootloader musi zajmować określony zakres pamięci, a więc może zajmować tylko: 128, 256, 512 lub 1024 bajty. W praktyce zastosowanie bootloadera jest niezwykle pomocne, do układu nie musi być podpięty programator ISP czy JTAG, programowanie może odbywać się przez UART, który zajmuje tylko 2 piny układu, co więcej często aplikacje układu wykorzystują UART z założenia.
Do poczytania PDF: [[http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=79206|AVRFreaks]]
====== Watchdog ======