Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 lis 2024, o 20:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 10 paź 2016, o 23:47 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.
Napisałem funkcję do zapisu do EEPROM i odczytu z EEPROM.
Problem w tym, że nie mogę sobie poradzić z odczytem z EEPROMa aż do wystąpienia znaku '\0'

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mając takie funkcje można je wywołać np tak:w Setup zapis, a w LOOP odczyt
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


o ile zapis działa poprawnie to odczyt działa ale tylko dla pierwszych 10 znaków. Przecież funkcja do ... while najpierw wykonuje działania a potem sprawdza czy "string[i]!='\0'" jest NULL - tutaj wychodzi że jest inaczej.
Niestety zmieniając formułę na
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
funkcja się zawiesza

Tak docelowo to jeszcze inaczej zrobiłbym tą funkcję, ale po takiej zamianie w ogóle nie działa, a powinna zwrócić wskaźnik na początek łańcucha.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i na koniec pytanie o Arduino MEGA2560. Ile to ma pamięci EEPROM? W nocie jest podane że tylko 4KB czyli 4096bajtów.
A próbując zapisać pod komórką 4097 zapisuje poprawnie, nawet pod adresem 5000000000 też zapisuje i odczytuje poprawnie.



Ostatnio edytowano 11 paź 2016, o 14:55 przez iwi, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 06:56 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Po pierwsze ciągi znaków deklaruje się jako:
char napis[] = "Ten napis zapisujemy do pamieci EEPROM";
i to zdecydowanie nie to samo co:
char * napis = "Ten napis zapisujemy do pamieci EEPROM";

Po drugie w Twojej pętli:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
inkrementacja i występuje przed sprawdeniem waruknu, więc w ten sposób raczej nie sprawdzisz ostatnio odczytanego znaku (co było, jak się domyślam, Twoim zamiarem).

Po trzecie w ostatniej funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
deklarujesz wewnątrz funkcji niezainicjowany wskaźnik do char, a później zapisujesz dane do lokalizacji, którą ten wskaźnik określa. Jak myślisz, gdzie te dane są zapisywane?

A tak w ogóle kompilator nie dawał Ci żadnych ostrzeżeń?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 09:01 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

andrews napisał(a):
A tak w ogóle kompilator nie dawał Ci żadnych ostrzeżeń?

Nie ma żadnych ostrzeżeń w środowisku Arduino 1.6.2

Myślałem że nie ma różnicy między *napis a napis[]. Zresztą parę dni temu oglądałem poradnik C++ odc 8 o stringach gdzie jest pokazany ten zapis jako równoważny.
Niemniej obie wersje działają. Wyczytałem teraz że jeśli zapiszę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to teraz oprócz odczytu mogę robić zapis i zmianę tego napisu na inny, a jak zapiszę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to odczyt będzie działał, ale nie mogę tego napisu podmienić na inny.
andrews napisał(a):
inkrementacja i występuje przed sprawdzeniem warunku, więc w ten sposób raczej nie sprawdzisz ostatnio odczytanego znaku (co było, jak się domyślam, Twoim zamiarem).

Tylko jak to obejść - jak dam inkrementację wcześniej to zacznie czytać od drugiej komórki, a tak jak jest to odczyta całego stringa bez znaku NULL - więc to mi wystarczy bo ten znak potem na końcu można dopisać. Tylko to tak teoretycznie bo muszę sprawdzić czy po zamianie na zmienną tablicową będzie to działać.


Co do tej funkcji ostatniej to na razie się nią nie zajmuję bo w sumie nie ma znaczenia czy będę ten napis odczytywał w sposób taki czy taki, ważne aby działało a na razie nie działa.

I jeszcze pytanie co do wielkości pamięci. dla uproszczenia - załóżmy że mamy Atmegę 8 z 512bajtowym EEPROM.
Czy jeśli zrobię zapis do adresu 600 to zapisze do komórki (600-512) czyli defakto do 88 komórki pamięci



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 09:51 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

iwi napisał(a):
Tylko jak to obejść - jak dam inkrementację wcześniej to zacznie czytać od drugiej komórki

Możesz spróbować np. tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i myślę, że raczej niczego nie będziesz musiał dopisywać ;)

iwi napisał(a):
I jeszcze pytanie co do wielkości pamięci. dla uproszczenia - załóżmy że mamy Atmegę 8 z 512bajtowym EEPROM.
Czy jeśli zrobię zapis do adresu 600 to zapisze do komórki (600-512) czyli defakto do 88 komórki pamięci

Nie wiem do czego potrzebna Ci ta informacja. Na pewno nie zapiszesz niczego do adresów większych od pojemności pamięci EEPROM zadeklarowanej przez producenta w dokumentacji ;), choćby dlatego, że rejestr adresowy pamięci EEPROM (EEAR) ma maskowane bity powyżej pojemności pamięci, więc cokolwiek byś tam spróbował wpisać, adresem będzie zawsze pozostałość z dzielenia Twojego adresu przez pojemność pamięci EEPROM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 11:14 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2583
Pomógł: 128

Nie wiem jak w Atmedze (obstawiam,ze podobnie), ale w zewnetrznych Epromach zapisze ci sie do adresu 88. W programatorach przy kostce o pojemnosci 128bajtow i odczycie jej jako 256 bajtowa dostaniesz dwa razy to samo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 18:04 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dzięki. Po prostu chciałem inkrementowac adresy wpisywane do Eeprom i sprawdzać kiedy się pamięć przepełnia ale widzę że tak nie da rady.

Co do tej inkrementacji w do...while to tak nie da rady w ogóle nie wychodzi z tej pętli.
Zamieniłem też deklaracje na char[] ale nic to nie zmienia
Ale sprawdzałem też zamiast char* jako String w końcu to c++ i po takim zapisie już nie można podmienić zmiennej napis2. Ptzy char* napis2 bez problemu można wpisać nowe wartości

Wysłane z mojego Redmi 3 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 19:19 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

iwi napisał(a):
Co do tej inkrementacji w do...while to tak nie da rady w ogóle nie wychodzi z tej pętli.

Ta pętla jest we funkcji do odczytu i będzie działać ("wyjdzie z pętli") pod warunkiem, że ciąg znaków w EEPROM jest zakończony znakiem terminującym. Piszesz, że zapis jest poprawny, tylko jak to sprawdzasz, skoro odczyt nie działa poprawnie? Jesteś pewien, że Twoja funkcja eeprom_write_string() zapisuje poprawnie znak '\0' na końcu ciągu w EEPROM?

Piszesz tak:
iwi napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Robisz tutaj dwa poważne błędy. Po pierwsze próbujesz skopiować tablicę o większym rozmiarze do tablicy o mniejszym rozmiarze (bez nadzoru nad przekroczeniem rozmiaru). Po drugie próbujesz pisać do tablicy zadeklarowanej poprzez wskaźnik (string literal), a tego się nie robi ani w C ani w C++.

Cytuj:
Zamieniłem też deklaracje na char[] ale nic to nie zmienia

Skoro wiesz lepiej...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2016, o 21:29 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

andrews napisał(a):
Skoro wiesz lepiej...

Nie wiem dlatego się pytam. Mówię tylko że w tym programie nie widziałem różnicy w tym zapisie. Program działa identycznie źle w obu przypadkach. Ale już teraz wiem dlaczego - ponieważ wpisywałem ten sam napis bez czyszczenia EEPROM.
Poprawny jest oczywiście zapis char napis[]="1234";

Masz rację tez co do wielkości tablic. Tablica 2 nie może być mniejsza niż jeden.
Zastanawia mnie tylko dlaczego jeśli napis2 zadeklaruję w ten sposób
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czy tez w taki sposób
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to po pierwszym obiegu pętli wychodzi z funkcji odczytawszy tylko pierwszą literę.

Natomiast jeśli dam tak to działa poprawnie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2016, o 12:05 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dziękuję za pomoc.
Po wielu próbach odpuszczam sobie wyszukiwanie końca znaku stringa w EEPROM.
Ponieważ taka funkcja może się przydać też do innych celów niekoniecznie odczytu stringa ale np kilku bajtów to myślę że najoptymalniejsze rozwiązanie z podaniem długości do odczytu. Przynajmniej będziemy wiedzieć co odczytujemy :)
I tak na gotowo Funkcja Zapisu i Odczytu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i teraz wywołanie może wyglądać tak dla stringa napis:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a odczyt przy zadeklarowanu wcześniej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Próbowałem funkcję odczytu przerobić, żeby potem można było przypisywać zmienną np tak
napis2 = eeprom_read_bytes(address_start, length)
ale niestety to nie jest takie proste bo o ile w funkcji wszystko działało, ale po opuszczeniu funkcji wskaźnik do tej tablicy znikał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2016, o 12:24 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

To co wstawiłeś tutaj, to sprawdzałeś w ogóle? Przecież te funkcje są bez sensu. CStringi, to chyba jeden z prostszych typów danych.

To:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zastanów się gdzie wstawiasz ten znak końca!

Tu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ile wynosi ILE_BAJTOW?

Stosowanie sizeof() do cstringów? Żeby zapisywać puste bajty do pamięci. EEPROM, ma ograniczoną ilość cykli.

Więc może spróbuj tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2016, o 13:37 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dziękuję za wyjaśnienia.
Funkcje sprawdzałem przed skopiowaniem ich tutaj i działały. Jedyne co zapomniałem przekopiować to wielkość ILE_BAJTOW, ale to sobie każdy może wpisać ile potrzebuje.

Twoje funkcje też działają, ale nie wiem dlaczego.
Pierwsze pytanie. Skoro napis_1 deklarujemy jako tablicę to dlaczego w funkcji podajesz * data.
Drugie pytanie. Jak to się dzieje że przy funkcji zapisu inkrementuje się po zmiennej "data".
O ile zapis data[i] jest jasne że jeśli i się zmienia to przesuwa się po elementach o tyle u Ciebie jest po prostu wskaźnik na początek zmiennej. Powinno zapisać pierwszy znak do każdej komórki pamięci a zapisuje dobrze.
Trzecie pytanie petla do while
Jest warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak to rozumieć? Czy to działa tak.
Pierwsze wywołanie funkcji i sprawdzamy czy 'T' != '\0' jeśli tak to zostaje w pętli
Drugie wywołanie funkcji i sprawdzamy czy 'e' != '\0' jeśli tak to zostaje w pętli
Trzecie wywołanie funkcji i sprawdzamy czy 'n' != '\0' jeśli tak to zostaje w pętli itd. aż do
Ostatnie wywołanie funkcji i sprawdzamy czy '\0' != '\0' tutaj wychodzi z pętli.

Czemu tego nie zapisać prościej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Oczywiście to nie będzie działało tak dobrze jak Twoje rozwiązanie, ale nie rozumiem dlaczego.

No i na koniec pytanie o organizację pamięci EEPROM.
Jak to rozwiązujecie sobie w programach.

Powiedzmy, że zapisuję pierwszą zmienną do EEPROM. Potem wrzucam tą naszą napis_1 potem wrzucam jeszcze parę innych napisów.
Żeby obliczyć początek każdego zapisu to muszę zrobic sobie jakieś notatki, żeby przez przypadek czegoś nie nadpisać a co najgorsze, żeby "ogon" nie zjadł "głowy" pamięci. Czy to się tak robi ręcznie czy można to jakoś zautomatyzować.
Żeby było może jaśniej.
Funkcja Serial.print wypisuje nam jakiś napis, dając raz jeszcze funkcję Serial.print wypisuje nam w tej samej linii następny napis - czyli gdzieś jest zapisana informacja o tym gdzie się skończył poprzedni wpis. Czy jest taka sama funkcja w zapisie do EEPROMa. Czyli zapis do EEPROM podając tylko zmienną a początek sobie obliczy sam i dorzuci nam w drugiej zmiennej adres i trzeciej zmiennej wielkość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2016, o 14:29 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

Może zacznę od końca, chociaż ja nie jestem biegły w takich wyjaśnieniach.

Pamięć EEPROM, to pamięc, która służy głównie do przechowywania rzadko modyfikowanych zmiennych. Może służyć też do ochrony danych, np w przypadku braku zasilania.

Pamięć EEPROM przeważnie, jeśli nie zawsze organizujemy w sposób stały. Czyli przechowujemy gdzieś w programie adresy i rozmiary wszystkich przechowywanych zmiennych. W przypadku stringów, wystarczą tylko adresy, ale na każdy taki string musisz zarezerwować sobie odpowiednią ilość miejsca).

Zamiast korzystać ze wskaźników, można to zapisać w notacji tablicowej (wyszło nawet prościej):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

iwi napisał(a):
Pierwsze pytanie. Skoro napis_1 deklarujemy jako tablicę to dlaczego w funkcji podajesz * data.
Ponieważ przekazując tablicę do funkcji, przekazujesz adres jej pierwszego elementu, czyli wskaźnik na pierwszy element.

iwi napisał(a):
Drugie pytanie. Jak to się dzieje że przy funkcji zapisu inkrementuje się po zmiennej "data".
Inkrementuje wskaźnik, co oznacza, że poruszam się po kolejnych elementach przekazanej tablicy.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Co do trzeciego pytania: To najpierw sprawdzany jest warunek, czy wskazywany obiekt jest różny od znaku '\0', a następnie inkrementowany jest wskaźnik i pętla jest kontynuowana lub nie w zależności od poprzedniego porównania.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2016, o 23:28 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2583
Pomógł: 128

Jak bedziesz często pisał do EEproma, to się w końcu wykrzaczy. Jak już musisz coś często zapisywać to wykorzystaj pamięć flash. Zamów sobie Yellowbooka - Mirek w nim porusza ten sposób. Dużo bardziej trwały i wcale nie taki trudny do opanowania.

Sent from my Mi-4c



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 06:48 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Dziekuje.
1000razy zapis wytrzyma. w Eeprom chce przechowywac ustawienia zegara tj czas letni albo zimowy plus adresy ds18 b20. oraz jeszcze nazwy menu. odczyt z eeproma chyba nie jest szkodliwy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 07:23 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

micky napisał(a):
Jak bedziesz często pisał do EEproma, to się w końcu wykrzaczy. Jak już musisz coś często zapisywać to wykorzystaj pamięć flash.

No nie zgodzę się z tym, skoro nota katalogowa od np. Atmega88 twierdzi, że:
Cytuj:
- Write/Erase cycles: 10,000 Flash/100,000 EEPROM
- Data retention: 20 years at 85°C/100 years at 25°C
EEPROM pozwala na 10 razy więcej cykli zapis/wyczyszczenie, a i działa znacznie dłużej w temperaturze pokojowej.

Po za tym w przypadku zapisu do FLASH musisz zapisać całą stronę, więc dobrze jest, kiedy ilość danych jest bliska rozmiarowi tej strony.

iwi napisał(a):
odczyt z eeproma chyba nie jest szkodliwy
Nie jest ;-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 09:11 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Sparrow-hawk napisał(a):
No nie zgodzę się z tym, skoro nota katalogowa od np. Atmega88 twierdzi, że:

Bo patrzysz tylko przez pryzmat jednej zależności a nigdy pewnie nie próbowałeś sposobu który opisuję w YB ;)

Co za znaczenie może mieć ilość cykli zapisu, jeśli ktoś w procku dokona ich hmm nie wiem może 500 a może i nawet 2500 razy w ciągu życia projektu ? ;) Oczywiście jeśli ktoś przewiduje tych zapisów np 50 tys w ciągu życia projektu no to wtedy oczywistym jest że warto zdecydowanie wybrać EEPROM, chociaż życzę powodzenia z takim przebiegiem ;) ... Warto czasem realnie spojrzeć po prostu na różne przypadki i potrzeby ....

Sparrow-hawk napisał(a):
Po za tym w przypadku zapisu do FLASH musisz zapisać całą stronę, więc dobrze jest, kiedy ilość danych jest bliska rozmiarowi tej strony.

I znowu - a co to za nakaz albo oograniczenie że ilość danych musi być bliska rozmiarowi strony ? ;) a kto mi zabroni zapisać 10 bajtów przy stronie o pojemności 128 bajtów ? ;) Albo co to za ograniczenie, że że trzeba zapisać całą stronę ? ... żadne ;) Tylko proszę nie podawaj mi argumentu, że szkoda pamięci Flash szczególnie gdy się używa procka w którym zostaje nam i tak mnóstwo wolnego miejsca w jakimś projekcie, który realizujemy.

Nie kłócę się ani oczywiście nie przekonuję, że nagle warto w KAŻDYM przypadku stosować Flash zamiast EEPROM, zwracam uwagę na bardzo arcy-ciekawą wg mnie alternatywę, z której zresztą korzysta się także w większych np 32-bitowych prockach ;) bez żadnego tam "ale"

No a niewątpliwą zaletą zapamiętania danych we Flash w stosunku do EEPROM jest wg mnie po tysiąckroć większa pewność ich utrzymania w ciągu życia projektu nawet w mało sprzyjających warunkach zewnętrznych. I tu jeśli chcesz to możemy się założyć o skrzynkę dobrego złocistego trunku ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 10:21 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

micky napisał(a):
Zamów sobie Yellowbooka

Nie ma jeszcze w sklepie Yellowbooka :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 11:15 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

micky napisał(a):
Jak bedziesz często pisał do EEproma, to się w końcu wykrzaczy. Jak już musisz coś często zapisywać to wykorzystaj pamięć flash
Więc odniosłem się do słowa często sugerując, że często -> EEPROM, rzadko -> Flash, pytanie ile dla kogo to jest często, a ile rzadko. I że moim zdaniem patrząc na notę katalogową szybciej wykrzaczy się flash, a nie EEPROM.

Co do rozmiaru strony strony to pisałem przecież o tym, że optymalnie będzie gdy rozmiar danych będzie bliski rozmiarowi strony, a nie o tym, że nas to w jakiś sposób ogranicza.
mirekk36 napisał(a):
po tysiąckroć większa pewność ich utrzymania w ciągu życia projektu nawet w mało sprzyjających warunkach zewnętrznych
Dlatego pisałem o temperaturze pokojowej ;-)
mirekk36 napisał(a):
Nie kłócę się ani oczywiście nie przekonuję, że nagle warto w KAŻDYM przypadku stosować Flash zamiast EEPROM
Ja też nie, chciałem jednak podkreślić, że są sytuacje, kiedy wykorzystanie pamięci EEPROM będzie bardziej korzystne, skoro już ją mamy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 11:23 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2583
Pomógł: 128

Rzeczywiście - masz rację co do ilości zapisu, tylko że ja mam trochę inne doświadczenia ze stabilnością zapisu do Eeproma. Co ciekawe, to w Microchipie ilość cykli jest większa.

Sent from my Mi-4c



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 paź 2016, o 15:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Sparrow-hawk napisał(a):
chciałem jednak podkreślić, że są sytuacje, kiedy wykorzystanie pamięci EEPROM będzie bardziej korzystne, skoro już ją mamy.

No oczywiście, z tym się trudno nie zgodzić - ot po prostu warto umieć dobrać sytuację do potrzeby albo potrzebę do sytuacji ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO