• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Karta sd i szukanie w pliku
#31
Ok to jeszcze pytanie.
Jak zdeklaruje eeprom.begin( max), czyli te 4M, to zaczynajac od adresu 0 arduino bierze pod uwage pierwszy adres gdzie lezy firmware czy juz od wolnego miejsca poza 1M zajety na firmware?

Przy konfiguracji arduino mam 1M no Spiffs, wiec te 1M juz mam zajete, wiec powinienem przyjac 1M,2M lub 3M.

Firmware laduje sie od adresu 0x00000000,wiec od poczatku.
Max to 1023984b, wiec 1M jest zarezerwowane.
Czy w tym 1M jest tez Ota?
Widze ze ota lezy za sketch,wiec miescic sie musi w tym 1M.
File system juz nie ma, ale na koncu flash sa dane Wifi config..
Zajade je czy nie?Wink


Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#32
Z samym ESP nie pomogę bo u mnie ma on niewiele zastosowań. Komercyjnego projektu na samym SP, pewnie nigdy nie zrobię. W takim projekcie, niskobudżetowym, byłby sens aby zaoszczędzić na pamięci za 3 czy 4zł.

W pojedynczym projekcie czy niewielkiej serii, taniej dodać zewnętrzną pamięć i użyć sprawdzonych funkcji (kilka godzin, dzień, max dwa), niż tydzień czy miesiąc nad tym pracować, aby zaoszczędzić kilka złotych na sztuce. Czas pracy kosztuje, tydzień to średnio 4000zł, jak zlecę na zewnątrz ok 6000. Musiałbym znaleźć frajera (zakładam, ze pamięć kosztuje 10zł), który za tydzień roboty, weźmie dychę czyli 10zł/40h = 2,5gr za godzinę (są chętni? Zapraszam) albo geniusza co zrobi to w godzinę (tez zapraszam do współpracy, mam wiele tematów do dokończenia, zrobienia).

W dużych projektach, w pamięci, trzymam konfigurację w trybie tekstowym lub z tokenami (dlaczego tak, temat na dłuższy wykład),  w dwóch kopiach, poprzednią  kopie firmware, tymczasowo aktualną (tu też temat na wykład). Tu wyjścia nie ma, musi być zewnętrzna pamięć,z dwóch powodów:
- innego, sensownego wyjścia nie ma, chyba, że upgrade jest robione tylko z PenDrive albo karty SD, ewentualnie dopuszczalne jest, aby w czasie upgrade urządzenie nie pracowało - np rozrusznik serca  Smile BTS, centrala telefoniczna w CPR  Smile
- gdy urządzenie kosztuje kilka set złotych czy tysięcy, to kilka złotych nie robi różnicy, liczy się funkcjonalność i niezawodność
 
Odpowiedź
#33
Ja ciebie rozumiem, tylko ze to nie komercyjny projekt.
Komercyjnego nie pisal bym w arduino, wole czyste c.
Komercyjnie to masz zasoby ludzi i czas, tutaj to typowo hobbystycznie.
Wymyslilem cos i sprawdze czy dziala..

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#34
Więcej niż 4kB EEPROM we flash to raczej w ESP8266 się nie uzyska, chyba że sam pozmieniasz core. A OTA zajmuje tylko przestrzeń na szkic. Zapewne EEPROM też jest brany z tej puli i RAM, dlatego nie przewidzieli większego.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#35
512 tylko dziala;(

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#36
(31-10-2018, 12:55)wchpikus napisał(a): Ja ciebie rozumiem, tylko ze to nie komercyjny projekt.
(...) tutaj to typowo hobbystycznie.

Jak chcesz się czegoś nauczyć, to kombinuj aby zrobić to we FLASH ESP, jak chcesz szybko skończyć projekt, daj zewnętrzną pamięć.

Często na Elektrodzie, czytam "mądrości", po co zewnętrzna pamięć EEPROM skoro są (przynajmniej dla ESP) biblioteki emulujące taką pamięć. Pobawiłem sie ta osławiona biblioteka dla STM i się zawiodłem. Zapis jednego bajtu lub słowa, zajmuje 4 bajty. Chcesz zapisać tekst 32 znaki (np hasło do Wi-Fi) potrzebujesz 32/2*4 = 64 bajty. Do tego nazwa sieci, kolejne 64 bajty. Na taka pierdułkę, potrzebujesz 128bajtów, czyli zajmujesz 10% emulowanej EEPROM w STM32F1xx 64k FLASH. Możesz oczywiście zwiększyć obszar EEPROM kosztem pamięci FLASH. To samo zapisane w zewnętrznym EEPROM zajmie 64 bajty,czyli połowę. W moim konkretnym przypadku, potrzebuję dużo pamięci, bo muszę zapamiętać listę lokatorów, kody RFID i inne dane, na jeden rekord potrzeba ok 40 bajtów. 100lokatorów to 4kB. Kopia bazy, kolejne 4. Dałem 64kB,bo ona ma stronę 64bajty dzięki czemu zapis jest 8 razy szybszy niż w pamięci 8k gdzie strona ma 8 bajtów.
Mógłbym oczywiście użyć wewnętrznej FLASH (nie emulować EEPROM) bo zapisy są bardzo rzadkie ale nie mogę, bo założeniem jest łatwe przeniesienie bazy w przypadku awarii lub wymiany sterownika. Pamięć dałem w podstawce i po problemie. O ile piorun nie strzeli, to wystarczy przełożyć pamięć.

Nie wspomniałem o jeszcze jednym rozwiązaniu ale wynika to z tego, że pojemności nie są duże. Można użyć EEPROM 1-Wire. Zaletą jest mała liczba wymaganych przewodów, wadą, kiepskie wsparcie obsługi 1-Wire w Arduino. Można oczywiście napisać własne procedury korzystające z UART. Pamięci 1-Wire obsługują Overdrive, więc komunikacja jest dość szybka (ok 120kb/s a nie 15,3 jak w standardzie), ale nie ma się co równać do I2C, gdzie pamięci działają na mon 400kHz, większe pojemności 1M, duże 3,4Mb/s.

O 1-Wire napisałem jako ciekawostka, a co do I2C, to czasem lepiej dać pamięć np 10 razy większą niż potrzeba gdy zależy na szybkim dostępie do danych. Pamięci o dużej pojemności mają szybkie interfejsy oraz duży bufor przy zapisie. Zapis 64bajtów zajmuje typowo 5ms, a nie 160ms jak np w 24C02, która ma bufor 4 bajty.
Jak danych jest dużo a zapisy niezbyt częste, to oczywiście DataFlash, które mają duże pojemności, szybką komunikację (20..30Mb/s), duży bufor (512/528 bajtów).
 
Odpowiedź
#37
Sprawdziłem, zapisałem i odczytałem 8 bloków po 2x256 B, u mnie działa 4kB EEPROM.


Kod:
1    0
2    0
3    1
4    0
5    2
6    0
7    3
...

4091    253
4092    7
4093    254
4094    7
4095    255
4096    7
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#38
Dzis sprawdzilem spiffs i dziala szybko, tylko nie wiem dlaczego wywala sie przy zapisie..
Odczytuje dane, skladam w maly string i zapisuje w oddzielnym pliku..
Przy ok 146 pliku robi reset Wink
Przy nastepnym starcie robie odczyt tych plikow i widze ze dane sa.
Tylko czy nie zdaza zapisac danych a leca juz nastepne ( input jest z uart z predkoscia 19200, wiec szalu nie ma, a jednak cos powoduje wd reset?
Stos raczej sie nie przepelnia, chyba ze o tym nie wiem (bufor zapisu do pliku?), lub ilosc plikow?
Nie wiem jakie jest ograniczenie, nie sadze ze pliki ze srednia ok 40 znakow zapelniaja caly flash 3M...
Powalcze jeszcze,ale widze ze dzialanie spiffs jest bardzo szybkie.

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#39
Przy dużej ilości stringów w programie może dochodzić do wycieków pamięci, jest tam taki serwer WWW pokazujący stan heap. Miałem kiedyś serwer WWW ze średnio skomplikowaną stroną jako string i działał od kilkudziesięciu minut do kilku godzin, co sekundę odświeżała się całą strona. Po zmianie strony na websocket, a potem na spiffs działa miesiącami. Są też funkcje do tego, można zamiennie drukować na UART. Można zerknąć do przykładu FSBrowser Serial.println(String(ESP.getFreeHeap())).
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#40
Przy odczycie, kiedy laduje taka transmisje do jednego stringa,wszystko dziala.
Fakt, zajmuje sporo ram, ale dziala stabilnie.

Sprobuje zapisac dane bezposrednio na jeden plik, jesli to nie pomoze, zapisac do ram jak bylo i potem skopiowac do pliku.
A jak to nie pomoze, bede musial zrobic maszynke do czytania i zapisu do pliku po zakonczonej transmisji.

Jeszcze mam troche pomyslowWink

Niestety u mnie nie chce dzialac exception-debuger, wiec nie mam mozliwosci sprawdzenia gdzie lezy problem.
Ogolnie Arduino strasznie dlugo mi sie otwiera, pomimo szybkiego pc.


Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości