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



Teraz jest 28 mar 2024, o 21:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 20 lut 2018, o 19:11 
Offline
Użytkownik

Dołączył(a): 28 cze 2014
Posty: 37
Lokalizacja: Gdańsk
Pomógł: 0

Cześć wszystkim ;)

Chciałem przedstawić moją implementację menu na lcd. Działanie można zobaczyć na filmie:



Link do plików źródłowych: https://github.com/embeddeddevpl/blog_r ... %232/STM32

Cały projekt napisany jest pod STM32 i wyświetlacz ze sterownikiem HD44780, ale implementacja samego menu jest odseparowana od rodzaju mikrokontrolera. W przypadku gdyby chciało się wykorzystać inny wyświetlacz to jednak wprowadzenie drobnych modyfikacji byłoby konieczne. Nie jest to taki kawał dobrej roboty jak biblioteka i generator Pana Mirka ;) Jak to pisałem to jeszcze takich cudów nie było :)

No ale gdyby ktoś chciał się z tym grzebać to może się przyda - w razie czego, napisałem też tutorial, gdzie tłumaczę całą implementację i wykorzystane mechanizmy: http://www.embeddeddev.pl/menu-na-lcd-wprowadzenie/
Wydaje mi się, że są tam opisane całkiem ciekawe zagadnienia, które niektórym mogą pomóc podszlifować programistyczne skillsy ;) Wszelki feedback mile widziany. Pozdrawiam :)

_________________
Zapraszam na bloga: http://www.embeddeddev.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2018, o 21:52 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 393
Lokalizacja: Mielec
Pomógł: 14

cześć.

nie rozumiem tego zapisu

if (currentPointer->parent) temp = (currentPointer->parent)->child;
else temp = &menu1;

czy? (currentPointer->parent) wskazuje teraz na -> child i temp przyjmuje parametr tylko z child,
czy? (currentPointer->parent)->child te dwa parametry sa przyjmowane przez temp,
?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 17:01 
Offline
Użytkownik

Dołączył(a): 28 cze 2014
Posty: 37
Lokalizacja: Gdańsk
Pomógł: 0

Cześć. Zmienna temp nie może przechowywać adresu kilku elementów menu. Przechowuje adres tylko jednego elementu i w tym wypadku jest to pierwszy element na danym poziomie menu. Nie możemy się do niego odwołać bezpośrednio jak w przypadku &menu1, więc trzeba w ten sposób: ((currentPointer->parent)->child). I teraz po kolei:
1. currentPointer przechowuje adres do jakiegoś elementu menu.
2. Ten element może mieć swoje dzieci, rodziców, itd. Poprzez zapis (currentPointer->parent) odwołujemy się już do zupełnie innego elementu menu - w tym wypadku rodzica aktualnego elementu.
3. Ten element także może mieć swoich rodziców, dzieci, itd. W tym wypadku odwołujemy się do jego dziecka: (currentPointer->parent)->child.
Jeszcze dla lepszego zobrazowania można to zapisać na dwóch zmiennych:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Zapraszam na bloga: http://www.embeddeddev.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 18:12 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 393
Lokalizacja: Mielec
Pomógł: 14

Brałem przyklad z twojego menu,
Tabkica menu1 lub inne gdzie tam parent jest null czyli zero czyli w ifa nie wejdzie i wykona sie else temp = &menu1, chodzi mi o sytuacje kiedy sie wykona if.

Chyba że źle to rozumiem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 19:28 
Offline
Użytkownik

Dołączył(a): 28 cze 2014
Posty: 37
Lokalizacja: Gdańsk
Pomógł: 0

If wykona się wtedy gdy będziesz na poziomie jakiegoś podmenu, a nie w menu głównym. Wtedy currentPointer będzie miał rodzica i warunek będzie spełniony. Np. rodzicem sub_menu1_1 jest menu1, a nie NULL:

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

_________________
Zapraszam na bloga: http://www.embeddeddev.pl/



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: 5 ] 

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