ATNEL tech-forum
https://forum.atnel.pl/

EEPROM - po raz setny... i struktury mini poradnik
https://forum.atnel.pl/topic10173.html
Strona 1 z 2

Autor:  SylwekK [ 12 sty 2015, o 13:21 ]
Tytuł:  EEPROM - po raz setny... i struktury mini poradnik

No niestety, mimo przejrzenia pół internetu, obejrzeniu poradników Mirka o strukturach, kilku różnych przykładów mam mętlik w głowie i nie potrafię sprowadzić do wspólnego mianownika najprostszego zapisu istniejących zmiennych do EEPROM. Odzywają się chyba nawyki bascomowe, gdzie była po prostu instrukcja do odczytu i instrukcja do zapisu i więcej do szczęścia mi potrzeba nie było.
W programie, który aktualnie robię nie myślałem o EEPROM od samego początku (w sensie programistycznym, bo założenia go oczywiście uwzględniały) i mając już zestaw zmiennych 8-o i 16-bitowych (które muszą mieć możliwość zapisu w EEPROM) kłopotliwe by było gdybym teraz musiał je przemianować na typ strukturalny i w całym programie czynić zmiany. Po prostu nie sądziłem, że zapis/odczyt w C działa na zupełnie innej płaszczyźnie i nie mówię, że to źle - wprost przeciwnie - przykładowo zapis całego bloku jest super... o ile się to rozumie.
Najbardziej nie kumam tego ustalania adresu pod, który się zapisuje dane - EEMEM. Wszędzie w przykładach widzę tylko przy nim jakąś zmienną (ewentualnie tablicę). Wiem już, że to wskaźnik jakiś, ale nie potrafię zebrać myśli, żeby to ogarnąć. Czy może mi ktoś wytłumaczyć jak chłop chłopu jak zapisać te moje kilka zmiennych do eeprom i później je odczytać? Przy następnym programie uwzględnię już struktury. No chyba, że da się to moje jeszcze jakoś wpakować w blok aby nie rujnować programu (było by pięknie), bo w końcu to 1500 linii (może i nie dużo ale jednak trochę jest) to i ze znalezieniem błędu mogę mieć później problemy. Z góry dzięki :).

Autor:  Jarecki [ 12 sty 2015, o 13:40 ]
Tytuł:  Re: EEPROM - po raz setny...

Nie wiem czy to Ci pomoże bo ja raczkuję w C ale robię w sowich programach to w ten sposób i niby działa :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  mirekk36 [ 12 sty 2015, o 13:45 ]
Tytuł:  Re: EEPROM - po raz setny...

ale oglądałeś dokładnie ten poradnik ? ;)
http://mirekk36.blogspot.com/2012/11/av ... iazek.html

SylwekK napisał(a):
Odzywają się chyba nawyki bascomowe

Jestem przekonany, że tak jest i pewnie jak zaskoczysz i w tym temacie, to później też będziesz mówił - że wcześniej to było nieporozumienie a w C robi się to bosko ;)

SylwekK napisał(a):
kłopotliwe by było gdybym teraz musiał je przemianować na typ strukturalny i w całym programie czynić zmiany.

I już tu pomyśl - bo sam piszesz, że kłopotliwe byłoby żeby dokonywać zmiany w całym programie. DOKŁADNIE tak jest jak się ma przyzwyczajenia z Bascoma - późniejsze zmiany, konieczność dokonania nagle większych zmian to wręcz MASAKRA!, a w C ? ... zero problemu gdy korzystasz ze zmiennych ułożonych w tablicach czy strukturach itp .... I tu nie chodzi nawet o sam eeprom tylko w ogóle o podejście do przechowywania zmiennych ....

SylwekK napisał(a):
. Po prostu nie sądziłem, że zapis/odczyt w C działa na zupełnie innej płaszczyźnie

Uwierz mi, że można nawet i w C robić tak jak w Bascomie pojedyncze zmienne i zapisywać je bezpośrednio i odczytywać z eeprom .... ale idąc tą drogą - sam już czujesz, że skarzesz się na dłuższą banicję - jeśli chodzi o WYGODY języka C i później będziesz, żałował że wcześniej się za to nie zabrałeś jak trzeba - tym bardziej widząc jak w innych wątkach wchłonąłeś wręcz jednym tchem pewne mechanizmy a później od razu władasz nimi jak mistrz szpadą ;)

SylwekK napisał(a):
Najbardziej nie kumam tego ustalania adresu pod, który się zapisuje dane - EEMEM.

Po co ci adres ? programowanie w C .... to dlatego WYGODA że ABSOLUTNIE rozumiesz? ABSOLUTNIE czochrają cię adresy, adresy fizyczne - po jaki gwint sobie tym głowę zawracać - toż to tylko właśnie później same problemy ....

SylwekK napisał(a):
Czy może mi ktoś wytłumaczyć jak chłop chłopu jak zapisać te moje kilka zmiennych do eeprom i później je odczytać?

Tzn łatwiej byłoby mi coś wytłumaczyć, gdybym np wiedział, że oglądałeś ten poradnik z linku, który pokazałem wyżej .... i wtedy gdybyś miał pytania do niego - to już by było można cię poprowadzić jak po nitce do kłębka a jednocześnie wręcz uzależnić cię od podejścia do tego zagadnienia tak jak się to robi w C ;) ... zresztą ty sam się później szybko uzależniasz ...

teraz może w mega gigantycznym skrócie .... to o czym mówię w poradniku

1. WSZYSTKIE zmienne które masz trzymać w eeprom zapakuj do jednej struktuty (tu mam nadzieję, że już coś wiesz na temat struktur w C)
2. Oczywiście - zanim zrobisz punkt 1 to zdefiniuj najpierw sobie TYP STRUKTURALNY bo posłużysz się później nim do przechowywania tych zmiennych zarówno w RAM, EEPROM i FLASH jednocześnie ! więc już mega uproszczenie
3. wobec powyższego - powołasz sobie aż TRZY komplety takich samych zmiennych tylko umieszczone w każdej pamięci

TMOJEDANE eem_dane EEMEM; // komplet w eeprom
TMOJEDANE ram_dane; // komplet w RAM
TMOJEDANE pgm_dane PROGMEM = { // komplet we FLASH
//.... tu inicjujesz dane DOMYŚLNE we FLASH
}

i teraz pomyśl sobie dzięki temu że trzymasz wartości DOMYŚLNE we FLASH - to czochra cię nawet sytuacja gdy padną one w eeprom albo gdy user sobie nabroi i chciałby "przywrócić ustawienia fabryczne" to w programie zrobisz to JEDNYM KLAWISZEM ! nawet przy starcie urządzenia - jak routerach - kojarzysz ? ;)

i teraz przy STARCIE twojego programu WCZYTUJESZ za jednym zamachem CAŁĄ STRUKTURĘ czyli wszystko z EEPROM do RAM !!!! i teraz program działa sobie wygodnie CAŁY CZAS na egzemplarzach WSZYSTKICH TWOICH zmiennych ale w RAM - WYGODNY DOSTĘP NA MAXA dla ciebie .... a gdy userowi przyjdzie pomysł gdzieś w MENU urządzenia aby zmienić jakąś zmienną to co ??? .... CYK JEDNO polecenie i przepisujesz CAŁY BLOK Z RAM DO EEPROM !!!! po choinkę bawić się w pojedyncze zmienne ? można zrobić nawet UPDATE BLOCK, i zapisane zostaną tylko te zmienne z RAM które nie były zmienione od ostatniego restartu, chociaż to żadna różnica i można spokojnie robić ZAPIS CAŁOŚCI

rozumiesz ? robiąc ZAPIS BLOK - od razu aktualizujesz WSZYSTKIE swoje zmienne i nie myślisz kompletnie w jakich komórkach one leżą - tym nie ma co sobie głowy zawracać.

A ze zmiennych wewnątrz takiej struktury korzystasz w całym programie przecież DOKŁADNIE TAK SAMO jak z normalnych zmiennych no może poza tym że masz do zmiennej np o nazwie "pos" dostęp przez strukturę

ram_dane.pos = 237;

rozumiesz ? i TERAZ UWAŻAJ! ..... w Bascomie później żeby zmienić jakąś zmienną, dodać jakąś zmienną usunąć jakąś zmienną to musisz dopiero się NASZALEĆ po kodzie - a tu ??? .... a tu panie to tylko zaglądasz sobie do pliku *.h gdzie masz zdefiniowany własny typ strukturalny i w nim: dodajesz, zmieniasz, usuwasz - zmienne - no robisz co chcesz

mając to wszystko na uwadze - spróbuj jeszcze raz obejrzeć ten poradnik i zadaj ew pytania do tego poradnika - to może będzie łatwiej?

------------------------ [ Dodano po: 1 minucie ]

Jarecki napisał(a):
Nie wiem czy to Ci pomoże bo ja raczkuję w C ale robię w sowich programach to w ten sposób i niby działa :)
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 to jest właśnie wypisz wymaluj - bascomowe podejście, które szybko "zaboli" :(

polecam koledze także obejrzenie tego poradnika:
http://mirekk36.blogspot.com/2012/11/av ... iazek.html

przydał się już niejednej osobie i wszyscy go sobie bardzo cenią ...

Autor:  Jarecki [ 12 sty 2015, o 14:50 ]
Tytuł:  Re: EEPROM - po raz setny...

Cytuj:
Jarecki napisał(a):
Nie wiem czy to Ci pomoże bo ja raczkuję w C ale robię w sowich programach to w ten sposób i niby działa :)
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 to jest właśnie wypisz wymaluj - bascomowe podejście, które szybko "zaboli" :(

polecam koledze także obejrzenie tego poradnika:
http://mirekk36.blogspot.com/2012/11/av ... iazek.html

przydał się już niejednej osobie i wszyscy go sobie bardzo cenią ...

Tak Panie Mirku ma Pan rację z tym BASCOM-em :) bardzo chętnie obejrzę polecany przez Pana poradnik żebym spojrzał na eeprom jako programista C a nie BASCOM-a :)

Autor:  SylwekK [ 12 sty 2015, o 18:50 ]
Tytuł:  Re: EEPROM - po raz setny...

Kurcze, panowie dzięki za błyskawiczną reakcję :) Przez chroniczny brak czasu dopiero teraz mogę odpisać. Mirku oglądałem oczywiście Twoje poradniki jak wspominałem tylko, że była godzina 2 w nocy to i coś mogłem przegapić, a i głowa nie pracuje już o tej porze jak powinna i pewnie trochę umknęło, ale dzięki Waszym postom chyba wreszcie załapałem o co tu biega. Pojedyncze utykanie bajtów w EEPROM z tego co widzę faktycznie nie ma chyba większego sensu no chyba, że mamy jedną góra dwie zmienne.
No dobra, a jeszcze ta jedna moja zagwozdka związana (już z zasady wiedzieć żeby wiedzieć ;) ) z miejscem w pamięci EEPROM... Po przykładach w poradnikach jak i w BB (przy okazji omawiania struktur) doszedłem do wniosku, że kompilator sam znajduje miejsce w EEPROM gdzie ma upchać te zmienne z bloku (po prostu rezerwuje sobie tą pamięć podobnie jak ram) czy może jestem nadal w błędzie ?? Oczywiście pomijam tu przykłady przekazywania pojedynczych bajtów z przykładów pozostałych kolegów oprócz Mirka, bo to już jest jasne.
W każdym razie doszedłem do wniosku, że szkoda by mi było w sumie skrupulatnie napisanego programu sterownika zapaćkać iście amatorskim rozwiązaniem zapełniania EEPROM dlatego podjąłem decyzje o podmianie zmiennych (strzeli się Find/Replace All i będzie git :) ).
O to do jakich wniosków doszedłem:
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 te wszystkie przypisy "=coś tam" będą skasowane. Zostawiłem je tylko dla sprawdzenia przez Was czy właśnie dobrze kombinuję. Bo teraz idąc dalej tym tropem wystarczy zrobić funkcje kopiowania bloków wg poradników i w zasadzie to wszystko. Jeszcze chciałem się upewnić czy teraz w programie głównym do zmiennych np. "repeatSet=10", "kalib=12", itd... mam się odnosić odpowiednio "ram.repeatSet=10", "ram.kalib=12" ?
Przyszło mi jeszcze do głowy, że w ten sposób mógłbym sobie łatwo zrobić kilka presetów przez dodanie po prostu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

... i odpowiednio komend kopiujących te obszary pamięci.
Chyba dobrze kombinuję, czy znowu coś przegapiłem :mrgreen:

Autor:  mirekk36 [ 12 sty 2015, o 19:00 ]
Tytuł:  Re: EEPROM - po raz setny...

SylwekK napisał(a):
doszedłem do wniosku, że kompilator sam znajduje miejsce w EEPROM gdzie ma upchać te zmienne z bloku (po prostu rezerwuje sobie tą pamięć podobnie jak ram) czy może jestem nadal w błędzie ??

DOKŁADNIE TAK - nie jesteś w błędzie a już zaczynasz dostrzegać zalety ;) jak widzę

SylwekK napisał(a):
Jeszcze chciałem się upewnić czy teraz w programie głównym do zmiennych np. "repeatSet=10", "kalib=12", itd... mam się odnosić odpowiednio "ram.repeatSet=10", "ram.kalib=12" ?

DOKŁADNIE TAK - chyba że gdzieś będziesz korzystał ze wskaźników do struktur .... w razie czego wesprzyj się jeszcze tym poradnikiem:
http://mirekk36.blogspot.com/2013/07/st ... adnie.html

SylwekK napisał(a):
Przyszło mi jeszcze do głowy, że w ten sposób mógłbym sobie łatwo zrobić kilka presetów przez dodanie po prostu:

Oczywiście że TAK - to co pokazałem w poradniku to TYLKO pewien przykład, struktury można dzielić, korzystać jeszcze do tego z UNII itp itd

zwróć tylko uwagę że jeśli miałbyś zrobić kilka presetów to:

to można je wszystkie zamknąć jeszcze w nadrzędnej strukturze ;) tak żeby była jedna wielka a w jej brzuchu różne presety ;)

SylwekK napisał(a):
Chyba dobrze kombinuję, czy znowu coś przegapiłem

... a nie mówiłem, że pójdziesz jak burza ? ;)

Autor:  SylwekK [ 12 sty 2015, o 19:20 ]
Tytuł:  Re: EEPROM - po raz setny...

Super :) To biorę się dalej za robotę. Jak wszystko będzie skończone i jakąś prowizorkę jeżdżącą zrobię to podrzucę linka jak ten sterownik działa. W sumie nie wierzyłem, że go w C w tak krótkim czasie będę mógł napisać (i zajmuje tylko 12kB z obsługą dwusilnikową, a ten poprzedni bascomowy w 16kB wszedł na styk i sterował tylko jednym silnikiem), a tak jak wspomniałem tylko ten eeprom zostawiłem na koniec, bo zawsze przy oprogramowywaniu takich gratów coś mi w trakcie przychodzi do głowy i z nagle z kilku parametrów robi się kilkanaście :) Tylko, że z drugiej strony jak bym od razu strukturę zrobił, to na jedno by wyszło :lol:
Aha, Mirku rozumiem, że "volatile" normalnie się zachowuje w strukturze tak jak przystało na zwykłą zmienną "volatile", bo w żadnym przykładzie ze strukturami się z tym nie spotkałem ? ...a to jak przecież wiesz bardzo ważne dla prawidłowego działania programu 8-)

Autor:  mirekk36 [ 12 sty 2015, o 20:22 ]
Tytuł:  Re: EEPROM - po raz setny...

SylwekK napisał(a):
Tylko, że z drugiej strony jak bym od razu strukturę zrobił, to na jedno by wyszło

Zapewniam, że nie wyszłoby na jedno - jak zrobisz jeden, dwa - trzy projekty to zobaczysz o co chodzi ... i po co są struktury. Później nie będziesz się mógł oderwać bo to gigantyczna oszczędność czasu - szczególnie właśnie gdy TRZEBA projekt rozwijać i zmieniać zmienne, ich typy itp

SylwekK napisał(a):
Aha, Mirku rozumiem, że "volatile" normalnie się zachowuje w strukturze tak jak przystało na zwykłą zmienną "volatile",

Oczywiście że tak - można niektóre zmienne robić volatile ;) - w czym problem ?

Autor:  SylwekK [ 12 sty 2015, o 21:07 ]
Tytuł:  Re: EEPROM - po raz setny...

Jeszcze raz wielkie dzięki :)

Autor:  SylwekK [ 13 sty 2015, o 02:37 ]
Tytuł:  Re: EEPROM - po raz setny...

Wow! Skończyłem program. Ostatnia jego funkcja czyli operacje na EEPROM wypadły pomyślnie praktycznie za pierwszym podejściem. Zrobiłem tam parę rzeczy po swojemu (chodzi o defaultowe przywracanie, itp.) i do tego 6 banków pamięci. Kurcze rewelka te struktury - nie takie straszne jak by się mogło wydawać :lol: . Jak sobie przypomnę teraz kombinacje jakie należałoby w bascom poczynić aby mieć podobną funkcjonalność... ech, szkoda pisać :) Mirek, jesteś wielki i jeśli ktoś jeszcze wątpi w przekaz Twoich wiadomości to jest niereformowalny ;)

Autor:  mirekk36 [ 13 sty 2015, o 07:07 ]
Tytuł:  Re: EEPROM - po raz setny...

SylwekK napisał(a):
Kurcze rewelka te struktury - nie takie straszne jak by się mogło wydawać

Kurczaki jak to miło widzieć jak ktoś zasiada do uczty i konsumpcji języka C i czerpie nawet już nie garściami ale całymi wiadrami, jak ty ;)

Autor:  SylwekK [ 17 sie 2015, o 21:54 ]
Tytuł:  Re: EEPROM - po raz setny...

Pytanie kolejne, żeby już nowego tematu nie zakładać :)

Podejrzewam, że to możliwe i będzie działać tak jak przewiduję jednak wolę zapytać, bo opiszę się jak głupi i mogło by się okazać, że straciłem tylko kupę czasu...

Chodzi o drugą strukturę na kolejne dane do EEPROM.
Przyszło mi do głowy, że pewne ustawienia systemowe w programie mogły by być modyfikowane przez użytkownika, ale chciałbym też dodatkowe ustawienia (powiedzmy jakieś kalibracje, itp.), do których użytkownik nie powinien mieć dostępu, a tylko ja po wpisaniu np. jakiegoś kodu. Dla tych danych chciałbym właśnie stworzyć drugą strukturę zmiennych i teraz pytanie główne: czy się to nie pogryzie i czy kompilator przydzieli kolejny obszar EEPROM dla kolejnej struktury?
Nigdy tak nie robiłem i nie widziałem podobnych rozwiązań, ale wydaje mi się, że jednak inteligencja kompilatora jest na tyle wysoka, że będzie takie coś możliwe. :)

Autor:  mirekk36 [ 17 sie 2015, o 22:07 ]
Tytuł:  Re: EEPROM - po raz setny...

Możliwe to to jest ;) ale można zrobić przecież ... i to polecam

JEDNĄ dużą strukturę która będzie siedziała w EEPROM, co za problem podzielić ją na mniejsze struktury ? hmmm ? ;)

to jest dobra droga

Autor:  SylwekK [ 17 sie 2015, o 22:15 ]
Tytuł:  Re: EEPROM - po raz setny...

No właśnie obawiam się tego dzielenia, żeby mi się nie rozjechało to co już mam, bo w sumie to nie bardzo wiem jak to podzielić :), a modyfikacja dotyczy już dość rozbudowanego programu i teraz bardzo na zmienne muszę uważać, a ich ewentualne przemianowanie (gdyby była oczywiście taka potrzeba przy tym dzieleniu) raczej nie wchodzi w grę.

Autor:  mirekk36 [ 18 sie 2015, o 04:19 ]
Tytuł:  Re: EEPROM - po raz setny...

Ale widzisz ze to pokazuje ze warto piszac szczegolnie obsluge eeproma zawsze brac takie rozwiazanie od poczatku ... i nie chodzi mi tu o to ze zalozmy od poczatku wymyslisz 100% nazw zmiennych i nic juz dodac nie mozna. Chodzi o dobre rozplanowanie typow strukturalnych. ... tzn wiesz ja sie nie upieram bo zrobisz jak uwazasz ... a kto jak kto ale ty sobie poradzisz ... nawet z zapisem 10ciu roznych struktur do eeprom. Ja podpowiadam tylko zexwlasnie dzieki temu ze w C sa struktury to latwo jest je przebudowywac ... i nawet latwiej zrobic teraz duza strukture niz bawic sie w dzielenie i tworzenie nowych ... bo to bedzie coraz wiekszy balagan w porownaniu do jednej struktury. Pomysl o wymorzystaniu anonimowych struktur wewnatrz wiekszych struktur ... co zapobiegnie w wielu newralgicznych dla ciebie przypadkach zmianom nazw dostepu do zmiennych. Ale pomysl tez o wskaznikach do tychze zmiennych albo w ogole do struktur podrzednych. Przeciez dzieki temu rozne czesci programu nawet nie musza wiedzec ze dzialaja na wielkiej strukturze bo beda widzialy tylko swohe wycinki. Ze strukturami fajnie sie to robi isa same zalety na przyszlosc programu ;) ... Ale jak mowie .... jak zrobisz kilka struktur w eeprom to nic sie nie stanie ;) ... nic

Autor:  RafPe [ 18 sie 2015, o 04:39 ]
Tytuł:  Re: EEPROM - po raz setny...

Mirku... Bo ciekawie prawisz o strukturach:) czy w Twoich poradnikach masz moze jakies przyklady na wsazniki wybranych czesci podstruktur ;) a jesli nie to czy moglbys jakis maly przyklad wrzucic:)?


Sent from my iPhone using Tapatalk

Autor:  mirekk36 [ 18 sie 2015, o 09:26 ]
Tytuł:  Re: EEPROM - po raz setny...

Jedyny mój poradnik ze strukturami to już od dość dawna jest na necie - na moim blogu , na YT ... nowszego nie robiłem ....
Generalnie żeby omówić takie zagadnienia bardziej skomplikowane to przydałby się taki bardziej skomplikowany poradnik, tyle, że
1. obejrzałoby go może z 5 osób z czego może 2-3 powiedziałoby że jest ok - a 17 osób powiedziałoby , że zasnęło
2. czas jaki musiałbym poświęcić na to .... eeeeh szkoda mówić
3. to warto byłoby omówić na - rzeczywistym jakimś i ciekawym przykładzie - np właśnie jakiejś gry czy czegoś - żeby zapadło w pamięci

Ale żeby nie być gołosłownym w stosunku do tego co pisałem wyżej o 4-5 w nocy

no to może taki mały przykład ;) troszkę to potrwa ale spójrzcie - taki mega prosty przykład może da jakieś wskazówki

załóżmy, że mamy takie oto dwie struktury:

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



i w jakimś programie (tak w mega uproszczeniu tak odwołujemy się do ich pól)


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


jasne ? prawda - to proste .... ale wyobraźmy sobie, że to są o wiele bardziej skomplikowane struktury zawierające setki pól a nawet wewnątrz innych struktur albo i jeszcze unii na dodatek ;) ... i takie dwie struktury załóżmy że obsługują nam cały program .... hmmm jak teraz złożyć to do kupy w jedną strukturę żeby było jak najmniej boleśnie ;) bo oczywiście jakieś tam zmiany może to za sobą pociągnąć - ale sami zobaczycie, że zamiana całości na jedną strukturę - docelowo spowoduje, że nasze oko zacznie lepiej to widzieć i jedna półkula mózgu będzie mogła pójść spać :lol: dokąd później znowu zbyt nie skomplikujemy całości

więc zaczynamy - pokażę dwie metody, ale to tylko przykład bo jak się zastanowić to można znaleźć jeszcze ze 20 innych sposóbów. Nie wiem czy o tym myśleliście czy nie ale pokażę:

SPOSÓB I

najpierw przygotowujemy sobie nadrzędną strukturę:

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 nasz program główny - musimy coś niecoś w nim pozmieniać oczywiście ;) - zauważcie, że tu nie skorzystaliśmy z anonimowych struktur a więc zmian będzie sporo ... chociaż? ... to tylko dodanie przedrostków dataczas. ;) tam gdzie wystąpią błędy kompilacji po tej zamianie - to wtedy nawet można jednym ruchem ZAMIEŃ wszystko zrobić ;)

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


ale ok ... jeśli to przeszkadza - to może spróbujmy z anonimowymi strukturami - bo czemu nie ? ;) - tylko wtedy trzeba uważać aby nie dublowały się nazwy pól w anonimowych strukturach ...

SPOSÓB II

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 nasz program główny zmieni się tak:

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


No ale można pójść tzw drogą wg GWIAZDY wskaźnika :lol: .... ja to lubię ;) ... czyli zostajemy przy przedostatnim sposobem definicji coraz większej MEGA struktury ! ... tadaaaa!

SPOSÓB III

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


ale ... hmmm chcielibyśmy dalej widzieć w programie np czas.hh albo cosik podobnego chociaż - zamiast jakichś przedrostków ;) no to do dzieła:

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


Co zrobiliśmy ? - pewnie widzicie - mamy mega strukturę którą sobie możemy zapeklować gdzie chcemy np do EEPROM, RAM, FLASH ... ale jednocześnie powołujemy sobie dzięki wskaźnikom wydzielone na zewnątrz mniejsze kawałki tego kociego torta :lol: W ten sposób to hulaj dusza piekła nie ma ;) ... można sobie robić śliczne odwołania do KAŻDEGO miejsca struktury ... A w zapisie jak widać zmieniło się nam tutaj tylko

czas.hh

na

czas->hh

co chyba nie jest dziwne bo działamy przez wskaźnik ;) ... uuuuf to tyle z rana - teraz biegnę do kociego studia dalej kręcić z basicem for androidem

Autor:  SylwekK [ 18 sie 2015, o 09:46 ]
Tytuł:  Re: EEPROM - po raz setny...

No i mimochodem powstał kolejny poradnik na temat struktur :-)
Świetnie opisana idea!
Myślę, że nie tylko ja skorzystam na tym opisie :-)
Dzięki Mirku!

------------------------ [ Dodano po: 1 minucie ]

Tak przy okazji widzę, że podobnie jak ja też nie nadużywasz snu... :-)

Autor:  mirekk36 [ 18 sie 2015, o 09:52 ]
Tytuł:  Re: EEPROM - po raz setny...

SylwekK napisał(a):
Tak przy okazji widzę, że podobnie jak ja też nie nadużywasz snu...

Dokładnie, nawet zastanawiam się dlaczego w toku ewolucji wykształcił się taki niepotrzebny nawyk :lol: ... przecież, przez sen tracimy tyyyyle czasu! :lol: ... tyle nowych rzeczy można się nauczyć :lol: tyyyle nowych programów napisać, płytek PCB zrobić .... i zaprojektować układów elektronicznych ... ok ok ... spoko wiem, czasem sam się na tym łapię - że chyba jakimś maniakiem jestem ? :lol:

Autor:  anshar [ 18 sie 2015, o 09:53 ]
Tytuł:  Re: EEPROM - po raz setny...

mirekk36 napisał(a):
No i mimochodem powstał kolejny poradnik na temat struktur :-)
Świetnie opisana idea!
Myślę, że nie tylko ja skorzystam na tym opisie :-)
Dzięki Mirku!

To prawda! W połączeniu z tym poradnikiem nagle wszystko stało się jasne. ;) W końcu jak to mówią ten "trybik" zaskoczył. Dziękuję panowie!

Autor:  RafPe [ 18 sie 2015, o 14:10 ]
Tytuł:  Re: EEPROM - po raz setny...

Dzieki Mirku! Bardo fajny przyklad i na pewno go wykorzystam!

Autor:  MikieMan [ 19 sie 2015, o 07:12 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

Świetny przykład Panie Mirku bo i ja dostałem nagle jakiegoś strukturalnego olśnienia :D

Autor:  mirekk36 [ 19 sie 2015, o 07:37 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

I o to chodzi, oby nam się ... strukturalnie żyło lepiej :lol:

Autor:  tec-dive [ 20 sie 2015, o 13:52 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

A ja podepnę się do tego wątku, bo chciałbym ten temat zgłębić o zapisywanie do EEPROM bardzo dużych liczb (64 bitowych). Liczby astronomiczne, bo temat astronomiczny ;)
Mianowicie muszę wykonać np. takie działanie x = 123456 * 1234567
No i problemu by nie było, bo poruszając się w zakresie uint64_t można to zrobić. Ale teraz w momencie wyłączenia urządzenia lub zaniku napięcia (oczywiście detekcja zaniku napięcia sieci i chwilowe podtrzymanie na czas zapisu wykonane)
chciałbym tą zmienną 64-bit zapisać do EEPROM. I jak czytam dokumentację to wygląda na to, że największa liczba jaka można zapisać jest typu dword (eeprom_write_dword).
Proszę o wyprowadzenie mnie z Ciemnogrodu w temacie dużych liczb i EEPROM :)

Autor:  mirekk36 [ 20 sie 2015, o 14:40 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

tec-dive napisał(a):
Proszę o wyprowadzenie mnie z Ciemnogrodu w temacie dużych liczb i EEPROM

A co to jest panie liczba 64 bitowa ? .... to jest 8 bajtów zgadza się?

liczba 32 bitowa to 4 bajty

liczba 16 bitowa to 2 bajty

a liczba 8 bitowa to 1 bajt

..... tzn wiem że to wiesz ;) ale nie nasuwa ci się tu jakiś pomysł ?

no zobacz - załóż różowe cyfrowe okulary i spójrz na każdą z tych liczb jak na tablicę w pamięci RAM ;) i co ??? ;)

teraz się okaże, że po choinkę ci w ogóle jakieś funkcje eeprom_write_dword ?

masz eeprom_write/read_block() ....

no ale skoro tak - to widać, że nie odrobiłeś panie lekcji i nie oglądałeś jednak mojego poradnika o strukturach bo jesteś nawet w temacie struktur a ty wciąż swoje o zapisie do eeprom pojedynczych liczb nie ważne ilu bitowych ... powiedz mi ... lubisz się KATOWAĆ ?

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


i zapisuj że całą strukturę ze wszystkimi liczbami - sorki ale aż ciężko wkoło macieju to powtarzać, skoro masz to pokazane dokładnie tutaj:

http://mirekk36.blogspot.com/2012/11/av ... iazek.html

weź pan to teraz obejrzyj i nagle się okaże - że już wiesz jak zapisywać liczby nawet gdyby one były uint128_t ;)

Autor:  tec-dive [ 20 sie 2015, o 14:55 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

No jak najbardziej użyłem struktur ale już sam nie wiem dlaczego tą jedną zmienną wyrzuciłem poza strukturę i na siłę kombinuję zapisywać osobno do EEPROM i to używając właśnie eeprom_write_block.
Już wrzucam ją tak jak było do struktury :)
Dopiero zaczynam poznawać obsługę EEPROM przy pomocy struktur i dlatego takie karkołomne twory u mnie wychodzą więc proszę o wyrozumiałość jeśli ukłują one kogoś w oczy ;)
Od razu czułem, że złą drogą podążam i że trzeba było się "słuchać" poradnika - a kilka razy go męczyłem, bo bardzo chcę zrozumieć, a strasznie opornie mi idzie.

Ale dużo już rozjaśnił ten mini poradnik wyżej :) Kilka godzin filmu ujęte w kilku zdaniach. Może tym razem się uda :)
Dziękuję za naprowadzenie.

Autor:  tec-dive [ 21 sie 2015, o 13:07 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

No i w końcu załapałem jak proste i jak pomocne mogą być struktury przy korzystaniu z EEPROM :)
Dzięki temu poradnikowi, filmom na YT i mikro poradnikowi powyżej uwolniłem się od karkołomnych sztuczek przy obsłudze dużych liczb i tejże pamięci.
Teraz aż miło coś zmieniać i dodawać w kodzie.

Mirku... dziękuję! :)

Aż sam siebie nie rozumiem jak można było tak długo nie pojmować tak prostego zagadnienia ;)

Autor:  mirekk36 [ 22 sie 2015, o 07:40 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

tec-dive napisał(a):
Mirku... dziękuję!

Aż sam siebie nie rozumiem jak można było tak długo nie pojmować tak prostego zagadnienia

Nie ma za co, nie przejmuj się .... do tego poznania struktur trzeba się po prostu przełamać , zaciąć i zaskoczyć ... a jak pójdzie to zwykle każdy ma taki oddech (ja też taki kiedyś miałem) ... uuuuf teraz życie w C zaczęło być duuużo prostsze ;)

Autor:  majster [ 10 paź 2015, o 08:57 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

mirekk36 napisał(a):
zaciąć i zaskoczyć ... a jak pójdzie to zwykle każdy ma taki oddech (ja też taki kiedyś miałem) ... uuuuf teraz życie w C zaczęło być duuużo prostsze ;)


Ja się właśnie zaciąłem :)

mam strukturę

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 chciałbym wpisać do struktury dane odebrane z RFM73 generalnie dane parsuję i w

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


przechowuję np odebraną temperaturę z czujnika dht22
teraz próbuję wpisać te dane do struktury 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.


następnie próbuję wyświetlić dane z struktury na LCD 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.



Pytanie moje brzmi ... dlaczego do struktury zapisuje się 4 a nie 46 ??
zawsze zapisuje sie tylko pierwszy znak :(

prędzej starałem się mijać struktury ale w przypadku tego projektu muszę się ich nauczyć i zaskoczyć jak się na nich operuje nie mniej aktualnie się zaciąłem pomorze ktoś ??

Autor:  RafPe [ 10 paź 2015, o 09:48 ]
Tytuł:  Re: EEPROM - po raz setny... i struktury mini poradnik

Bo *wynik to wartosc pojedynczego elementu char ?


Sent from my iPhone using Tapatalk

Strona 1 z 2 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/