Kłopoty z pamiecią

User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Hej, dawno już nic nie pisałem , żadnego kodu i mam duże zaległości a pamięć już nie ta, choć nigdy nie była za dobra :lol:
Do rzeczy, jakie teraz mamy mechanizmy / narzędzia w supladevice do zapamiętania zmiennej we "eeprom" . Potrzebuję zapamiętać wartość przed wyłączeniem sie układu.
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
vajera
Posts: 7286
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

shimano73 wrote: Fri Jul 17, 2026 6:16 am Hej, dawno już nic nie pisałem , żadnego kodu i mam duże zaległości a pamięć już nie ta, choć nigdy nie była za dobra :lol:
Do rzeczy, jakie teraz mamy mechanizmy / narzędzia w supladevice do zapamiętania zmiennej we "eeprom" . Potrzebuję zapamiętać wartość przed wyłączeniem sie układu.
Moja rekomendacja - użyj biblioteki Preferences ("EEPROM" też jest zaimplementowany z jej użyciem).
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

shimano73 wrote: Fri Jul 17, 2026 6:16 am Hej, dawno już nic nie pisałem , żadnego kodu i mam duże zaległości a pamięć już nie ta, choć nigdy nie była za dobra :lol:
Do rzeczy, jakie teraz mamy mechanizmy / narzędzia w supladevice do zapamiętania zmiennej we "eeprom" . Potrzebuję zapamiętać wartość przed wyłączeniem sie układu.
vajera wrote: Fri Jul 17, 2026 6:32 am ....
Moja rekomendacja - użyj biblioteki Preferences ("EEPROM" też jest zaimplementowany z jej użyciem).
Kiedyś bazując na zapisie do EEPROM natknąłem się na problem. Potrzebowałem przy starcie ESP wyciągnąć dane z EEPROM(zmiennej) ale istotne było czy ten zapis już wcześniej był robiony. Można takie coś zrealizować flagami w kodzie programu ale co jeśli jest to pierwsze uruchomienie ESP? W tym momencie jak zbawienie przyszła właśnie wiedza o użyciu Preferences a dokładnie NVS/Preferences.
NVS przechowuje istnienie klucza niezależnie czy wartość była zapisywana. isKey() w Preferences mówi, czy wartość była wcześniej zapisana.
Może przyda Ci się też ta dodatkowa informacja.
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Pytanie czy chcesz to używać w jakiejś funkcji mocno wbudowanej w supla-device, czy robisz coś zupełnie obok :).

SD ma tutaj dwa główne mechanizmy:
- klasy Supla::Storage do przechowywania stanu kanałów - same zapisują, same odczytują, całkowita wielkość danych nie może się zmeiniać, bo wszyskto wtedy jest kasowane i pisane od nowa. W Arduino mamy tu dwie implenentacje Supla::Eeprom i Supla::Fram. W buildach esp-idf mamy dodatkowe mechanizmy z SUPLOwą obsługą wear leveling. W zasadzie możemy na flashu pisać co 5 s 24h/dobę przez 30 lat bez ryzyka uszkodzenia flash (oczywiście przy spełnieniu odpowiednich warunków).
- klasy Supla::Storage::Config do przechowywania konfiguracji - tutaj zasada jest taka, że to nie zmienia się często. W Arduino opiera się to na własnej implementacji Supla::KeyValue przechowywanej jako pliki na LittleFs (klasa Supla::LittleFsConfig). Ten KeyValue to była moja odpowiedź na NVS z esp-idf (którego używam w urządzeniach opartych na esp-idf). W tamtych czasach nie było jeszcze wspomnianego wcześniej Preferences. Chwilę potem pojawiło się Preferences dla ESP32 na Arduino, ale nadal brakowało dla ESP8266. Więc zamiast pisać osobną implementację dla ESP32 i ESP8266 na Arduino, to napisałem jedną współną "KeyValue". Preferences to w zasadzie wrapper na NVS z esp-idf.

Używając klas SUPLOwych, wpinasz się pod life-cycle urządzenia SUPLI :). Czyli np. SD wspiera "factory reset", który dba o to, aby sprzątnąć Supla::Storage oraz Supla::Storage::Config. Jak dodasz te ustawienia do Preferences, to factory reset z SD ich nie sprzątnie.
Najlepsze suple dla Twojego domu :mrgreen:
nebraska
Posts: 204
Joined: Thu Dec 08, 2022 3:00 pm
Been thanked: 1 time

Post

Tak jak Krzysztof napisał.
Polecam ja korzystam z suplowej jak potrzebuje zapisać jakaś zmienna żeby pamiętał po resecie i działa git.
User avatar
Duch__
Posts: 2199
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole
Been thanked: 6 times

Post

Jeśli dane nie są strategiczne i mogą ulec uszkodzeniu przy brak zasilania, ale zależy na przechowywaniu na czas resetu to polecam RTC RAM. Używam tego np w urządzeniach które chodzą spać, by po restarcie kontynuowały liczenie. Ważna jest tylko suma kontrolna CRC przechowywanych danych by stwierdzić po resecie czy dane są prawidłowe czy nie.
User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

Ja stosuje Preferences jako znacznik tego czy zostały zablokowane lockbity ESP, po to aby co restart układu nie szła komenda do ich blokowania, więc odpytuję o konkretny bit, jeśli nie jest ustawiony do blokuję procesor przed odczytem i niepowołanym dostępem, no i oczywiście zwykłym resetem ustawień tak jak Krzysztof wspomniał nie skasuje się jego stan.
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

veeroos wrote: Wed Jul 22, 2026 9:21 am Ja stosuje Preferences jako znacznik tego czy zostały zablokowane lockbity ESP, po to aby co restart układu nie szła komenda do ich blokowania, więc odpytuję o konkretny bit, jeśli nie jest ustawiony do blokuję procesor przed odczytem i niepowołanym dostępem, no i oczywiście zwykłym resetem ustawień tak jak Krzysztof wspomniał nie skasuje się jego stan.
eFuse możesz odczytywać z eFuse :).
Możesz też dać domyślny profil aplikacji na full encrypted & locked - wtedy bootloader + apka same o to dbają przy uruchamianiu binarki.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

W arduino też tak można ustawić? ;). Do arduino tylko znalazłem sposób z ustawianiem Fusebitów. Jakoś przymierzam się do zmiany narzędzia, ale jakoś brak mi czasu na wgryzienie się jak to wszystko porządnie skonfigurować.
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Ogólnie w Arduino jest dostępny cały esp-idf. Trzeba tylko odpowiednie include dodać i można używać. Teoretycznie dostępność części funkcji zależy od sposobu budowania, ale większość rzeczy dostępnych pośrednio w Arduino powinno działać też przy bezpośrednim użyciu.
Najlepsze suple dla Twojego domu :mrgreen:

Return to “Pomoc”