ESP8266 + SDK - zapis struktury do pamięci flash

Aug 15, 2017 4 Replies

Może ktoś się orientuje jak to można zrobić, bo nigdzie nie mogę znaleźć dokładnej instrukcji. Wiem, że korzystając z Arduino można skorzystać z biblioteki wzorowanej na AVR-owym EEPROM.h. Ja jednak preferuję natywne SDK z uwagi na wykorzystanie callbacków oraz fakt, że używam już opartych na nim bibliotek.



Wiem, że istnieją funkcje do zapisu danych do pamieci flash: spi_flash_erase_sector() spi_flash_write() spi_flash_read()



Jednak jak ustalić obszar pamięci, do którego mogę bezpiecznie zapisywać swoje dane? Czy przez zapisaniem/po odczytaniu struktury będę musiał wykonać jeszcze jakieś dodatkowe operacje, związane np. z wyrównywaniem bajtów?


Może wykorzystać jakiś gotowiec emulujący eeprom. Nie używałem.

formatting link
ostrzeżenie przed nadpisaniem danych jest więc sprawdzić będzie trudno.

Pozdrawiam

Użytkownik "Atlantis" napisał w wiadomości grup dyskusyjnych:59931d3a$0$15208$ snipped-for-privacy@news.neostrada.pl...

Może ktoś się orientuje jak to można zrobić, bo nigdzie nie mogę znaleźć dokładnej instrukcji. Wiem, że korzystając z Arduino można skorzystać z biblioteki wzorowanej na AVR-owym EEPROM.h. Ja jednak preferuję natywne SDK z uwagi na wykorzystanie callbacków oraz fakt, że używam już opartych na nim bibliotek.

Wiem, że istnieją funkcje do zapisu danych do pamieci flash: spi_flash_erase_sector() spi_flash_write() spi_flash_read()

Jednak jak ustalić obszar pamięci, do którego mogę bezpiecznie zapisywać swoje dane? Czy przez zapisaniem/po odczytaniu struktury będę musiał wykonać jeszcze jakieś dodatkowe operacje, związane np. z wyrównywaniem bajtów?

W dniu 15.08.2017 o 18:11, Atlantis pisze:

Zacznij od sprawdzenia czy da się jednocześnie kasować jeden sektor w pamięci flash a drugi w tym samym czasie czytać - z tego co widzę w datasheetach flashy SPI, to nie bardzo. Oznacza to, że w czasie kasowania sektora/zapisu, twój program będzie musiał się zatrzymać, bo tylko 32kB programu jest cache'owane a reszta jest w miarę potrzeby wczytywana z zewnętrznego flasha.

Tu masz mapę pamięci flash

formatting link
ęc możesz się zorientować gdzie jest trochę miejsca.

To ma być jakiś config w strukturze zapisywany w flash? Ja robię tak, umieszczam klasycznie strukturę w ram,. Kompilator sam zadba o odpowiednie wyrownanie. Później kompiuje zawartość struktiry bajt po bajcie do dowolnego adresu flash. A gdy chcę ją załadować ładuję z flash do &struktura w ram. Można też strukturę czytać przez wskaźnik od razu z adresu flash jeśli wcześniej zadba się by adres był /4

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required