Atlantis
Guest
Tue Aug 15, 2017 4:11 pm
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?
pawel
Guest
Wed Aug 16, 2017 6:51 pm
Może wykorzystać jakiś gotowiec emulujący eeprom. Nie używałem.
https://github.com/azim0ff/eeprom
Niestety 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$65785112@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?
pawel
Guest
Wed Aug 16, 2017 6:52 pm
Ups. Nie doczytałem że chodzi o struktury danych.
Zbych
Guest
Wed Aug 16, 2017 7:28 pm
W dniu 15.08.2017 o 18:11, Atlantis pisze:
Quote:
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?
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
https://github.com/esp8266/esp8266-wiki/wiki/Memory-Map
więc możesz się zorientować gdzie jest trochę miejsca.
Marek
Guest
Wed Aug 16, 2017 10:49 pm
On Tue, 15 Aug 2017 18:11:31 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
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?
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
--
Marek