Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] ESP8266 - zapis danych w EEPROM, a odczyt daje inne dane.

sotb 08 Jul 2019 22:20 1104 6
Relpol
  • #1
    sotb
    Level 11  
    D1 mini PRO. Skorzystałem z przykładu. Trochę poczytałem jak to działa i zapisałem w EEPROM kilkanaście zmiennych boolean i byte. Zapis i odczyt był poprawny. Testowałem przez 2 dni. Uznałem, że wszystko działa poprawnie. Zapisywałem głównie zmienne byte wartością 100.
    Ustawiłem wielkość EEPROM na 512 i zwiększyłem wykorzystanie do 380. To zrobiłem w domu.
    W pracy sprawdziłem i poprawiłem kod kilkanaście razy także resetując płytkę. Zapisałem część miejsca w eeprom zmienną byte o wartości 99. Wszystko poprawnie zapisało i odczytało.
    W domu podłączyłem płytkę do kompa, odpaliłem Arduino IDE, wykonałem odczyt i wszystkie wartości, które w pracy miałem zapisane jako 99 odczytane zostały jako 100.
    Co jest, myślę? Zapuściłem fragment kodu zapisującego EEPROM liczbą byte o wartości 99. Za każdym razem odczyt dawał 100. Zmieniłem zapisywaną wartość na 0. Też 100. W końcu wykonałem trzykrotnie zapis bez robienia odczytu. Po trzecim razie wszystkie pola, które miały być zerami okazały się liczbami 99.
    No... gdyby brakowało EEPROM.commit() to bym jeszcze zrozumiał, ale takie działanie eeprom zupełnie mnie pozbawia możliwości logicznego wyjaśnienia.

    Code: c
    Log in, to see the code


    Powyżej to fragmenty kodu włączającego przekaźnik. Operuję na czasie, więc liczby 99 oznaczają puste komórki eeprom.
    Poniżej to funkcja, która powinna powstawiać 0, a pojawiły się liczby 99.

    Code: c
    Log in, to see the code

    No i co o tym można sądzić?
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Relpol
  • Helpful post
    #2
    khoam
    Level 41  
    sotb wrote:
    Ustawiłem wielkość EEPROM na 512 i zwiększyłem wykorzystanie do 380.

    Pokaż, jak wygląda ta inicjalizacja emulowanego EEPROM w setup(), w szczególności to "zwiększenie".
  • #3
    sotb
    Level 11  
    Zwyczajnie.
    Code: c
    Log in, to see the code


    Testując początkowy kod wykorzystywałem 319 bajtów. Obecnie 382.
    To cały kod jeśli chodzi o przypisanie wartości do zmiennych.
    Code: c
    Log in, to see the code


    A poniżej funkcja zapisująca w całości.
    Code: c
    Log in, to see the code
  • Helpful post
    #4
    khoam
    Level 41  
    Jakie masz ustawienia płytki w Arduino IDE w obu przypadkach? 16M (14M SPIFFS) czy 16M (15M SPIFFS)?
    Zakładam, że jest wybrana "LOLIN (WEMOS) D1 mini Pro".
  • #5
    sotb
    Level 11  
    Nawet nie zauważyłem, że w pracy mam LOLIN(WEMOS) D1 R2 &mini - 4M(no Spiffs). W domu Lolin (Wemos) D1 mini PRO - 16M(14M SPIFFS). Czyżby to była przyczyna?
  • Helpful post
    #6
    khoam
    Level 41  
    sotb wrote:
    Czyżby to była przyczyna?

    Może. To jest istotne w momencie linkowania kodu dla ESP.
    W dokumentacji klasy EEPROM dla ESP8266 jest napisane, że "EEPROM library uses one sector of flash located just after the SPIFFS".
    Zastanawiam się, czy jak skompilowałeś i wgrałeś kod w trybie "4M(no SPIFFS)" to ta biblioteka będzie działać poprawnie.
    Nie zaszkodzi skompilować i wgrać powtórnie kod, ale z ustawieniami płytki "Lolin (Wemos) D1 mini PRO - 16M(14M SPIFFS)" i sprawdzić.
  • #7
    sotb
    Level 11  
    Rzeczywiście. Po zmianie ustawień w pracy na właściwą płytkę te zaskakujące problemy nie występują, zatem dziękuję za wskazówkę. Klikam "pomógł" i zamykam temat.