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



Teraz jest 27 lis 2024, o 19:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 31 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 12 sty 2015, o 13:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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 :).

_________________
http://www.sylwekkuna.com



Ostatnio edytowano 18 sie 2015, o 21:16 przez SylwekK, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2015, o 13:40 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2015, o 13:45 
Offline
Moderator
Avatar użytkownika

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

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 postu otrzymał pochwałę

_________________
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: 12 sty 2015, o 14:50 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

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 :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2015, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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:

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2015, o 19:00 
Offline
Moderator
Avatar użytkownika

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

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 ? ;)

_________________
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: 12 sty 2015, o 19:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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-)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2015, o 20:22 
Offline
Moderator
Avatar użytkownika

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

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 ?

_________________
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: 12 sty 2015, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Jeszcze raz wielkie dzięki :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2015, o 02:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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 ;)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2015, o 07:07 
Offline
Moderator
Avatar użytkownika

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

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 ;)

_________________
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: 17 sie 2015, o 21:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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. :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2015, o 22:07 
Offline
Moderator
Avatar użytkownika

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

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

_________________
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: 17 sie 2015, o 22:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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ę.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sie 2015, o 04:19 
Offline
Moderator
Avatar użytkownika

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

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

_________________
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: 18 sie 2015, o 04:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sie 2015, o 09:26 
Offline
Moderator
Avatar użytkownika

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

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 postu otrzymał pochwałę

_________________
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: 18 sie 2015, o 09:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

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... :-)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sie 2015, o 09:52 
Offline
Moderator
Avatar użytkownika

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

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:

_________________
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: 18 sie 2015, o 09:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

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!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sie 2015, o 14:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2015, o 07:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2014
Posty: 745
Lokalizacja: Warszawa
Pomógł: 32

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

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2015, o 07:37 
Offline
Moderator
Avatar użytkownika

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

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

_________________
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: 20 sie 2015, o 13:52 
Offline
Użytkownik

Dołączył(a): 24 cze 2014
Posty: 113
Pomógł: 1

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 :)

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2015, o 14:40 
Offline
Moderator
Avatar użytkownika

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

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 ;)

_________________
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: 20 sie 2015, o 14:55 
Offline
Użytkownik

Dołączył(a): 24 cze 2014
Posty: 113
Pomógł: 1

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.

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2015, o 13:07 
Offline
Użytkownik

Dołączył(a): 24 cze 2014
Posty: 113
Pomógł: 1

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 ;)

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2015, o 07:40 
Offline
Moderator
Avatar użytkownika

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

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 ;)

_________________
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: 10 paź 2015, o 08:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

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ś ??

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 paź 2015, o 09:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Bo *wynik to wartosc pojedynczego elementu char ?


Sent from my iPhone using Tapatalk

_________________
sig off ;(



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: 31 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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