..chciałbym zwrócić uwagę, że stosowna podpowiedź jest na mojej stronie od kilku lat ->podstrona "Tips & Tricks"pimowo pisze: '----------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------
'TAK PRZY OKAZJI
'Jak to zrobic aby domyslne dane same sie wpisaly do eeprom?
'Przykladowo wrzucam nowy kod do AVR i wszystkie dane mi sie kasuja
'Chcialbym aby domyslne dane same sie wpisaly do eeprom przy pierwszym starcie
'Gdy eeprom byla juz zapisywana to nic nie robimy
'----------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------
Poniżej przedruk:
Może kogoś zaciekawi jak najczęściej rozwiązuję sprawy zmiennych przechowywanych w Eeprom i ich początkowych wartości
Należy wiedzieć że zaraz po programowaniu cała pamięć Eeprom jest "skasowana" czyli wypełniona &HFF
To powoduje że kiedy w programie umieścimy coś takiego jak odczyt do zmiennej typu Word to uC odczyta &HFFFF czyli 65535
Jeszcze gorzej jest kiedy odczytana wartośc ma być przepisana do zmiennej typu Integer. &HFFFF oznacza wtedy wartość -32767
Częstym sposobem na rozwiązanie tego problemu były zapisy typu:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Dim Zmienna As Word
- Readeeprom Zmienna , 1
- If Zmienna > Oczekiwana_wartośc_max Then Zmienna = 100 'przykladowa wartość
Dlatego piszę to inaczej
Wykorzystuję to, że Eeprom początkowo ma wartości &HFF
Odczytuję do zmiennej tylko jeden bajt i sprawdzam czy był już kiedyś zapisywany moją umówioną wartością.
Jeśli nie, to zapisuję ją tą umówioną wartością i przy okazji wpisuję do eeprom domyślne ustawienia dla urządzenia.
Sposób ten ma jeszcze jedną zaletę. Bardzo łatwo jest wbudować funkcję przywracania "ustawień fabrycznych".
Kolejność wtedy wygląda tak:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '**************************************************
- '* WARTOŚCI POCZĄTKOWE I PAMIĘTANE W EEPROM *
- '**************************************************
- Config PINB.0 = Input : Set PORTB.0 : Reset_ustawien Alias PINB.0
- 'przyciśnięcie przycisku przy starcie przywróci ustawienia domyślne
- 'zmienna do sprawdzenia stanu programowania eeprom, jej odpowiednik w eeprom i wartość umówiona
- Dim Ee_check As Byte , Ee_check_ee As Eram Byte : Const Mem_ee = &H10
- Dim Tryb_pracy As Byte , Tryb_pracy_ee As Eram Byte ' zmienna programu i jej odpowiednik w eeprom
- Dim Ilosc_stopni As Byte , Ilosc_stopni_ee As Eram Byte ' zmienna programu i jej odpowiednik w eeprom
- Dim Example_str As String * 15, Example_str_ee As Eram String * 15
- Ee_check = Ee_check_ee ' sprawdź czy eeprom była programowana
- If Reset_ustawien = 0 Then Ee_check = &HFF ' nawet jeśli to przyciskiem można to zmienić
- If Ee_check <> Mem_ee Then ' jeśli nie była programowana
- Ee_check_ee = Mem_ee ' to zostaw znak, że już programowana
- Ilosc_stopni_ee = 21 ' wpisz wartości domyślne
- Tryb_pracy_ee = 0
- Example_str_ee = "Zostaw wiadomosc"
- End If
- ' ** MEMORY READING **
- Ilosc_stopni = Ilosc_stopni_ee ' tutaj już normalne odczytywanie z eeprom
- Tryb_pracy = Tryb_pracy_ee ' tylko to będzie się działo jeśli eeprom już programowana
- Example_str = Example_str_ee