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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 26 lip 2025, o 16:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
    Autor Wiadomość
    PostNapisane: 28 wrz 2020, o 21:31 
    Offline
    Nowy

    Dołączył(a): 30 sie 2020
    Posty: 4
    Pomógł: 0

    Witam ! Jestem tu nowy więc kilka śłów o sobie. Z zawodu , wykształcenia i hobby jestem elektronikiem. Przepracowałem w tym zawodzie 50 lat.
    Od początku lat 90-tych kiedy to postawiłem na biurku pierwszego PC-eta zabawiam się komputerami i mikrokontrolerami. Napisalem wiele programów na 8051 w języku asembler a także wiele programów na PC-eta. Ostatnio dkryłem arduino a z nim AVR-y. Arduino to znakonita platforma do pisania programów w C i służy mi znakomicie. Język arduino to trochę tak jak Bascom. Daje wrazenie że się coś umie zrobić a tak naprawdę niczego nie uczy. Jedyna zresztą moim zdaniem niewielka wada to ograniczenie do jednego typu mikrokontrolera. Ale do rzeczy. W ramach cwiczeń napisałem sobie bibliotekę która tworzy menu dwupoziomowe na LCD. Wszystko działa. Prawdopodobnie ktoś biegły znalazłby tam sporo dziwnych wynalazków ale jako ćwiczenie jest ok. Aby max. zautomatyzować tworzenie menu ilość pozycji w poszcz. menu jest obliczana przez program.
    W programie są dwa typy strukturalne: menu głownego i menu rozwijanych. różnią się tylko jednym elementem. Każde menu jest zawarte w tablicy .Aby obliczyć ilość pozycji musiałem napisać dwie funkcje oddzielnie dla menu głównego i rozwijanego a to mi się nie podoba. Wyczytałem z niebieskiej ksiązki (zieloną dopiero zamówiłem) że można użyć typu void a potem rzutować na typ docelowy. Wtedy byłaby tylko jedna uniwersalna funkcja. Napisałem coś takiego ale nie działa tzn. kompilator się bardzo denerwuje. Poświęciłem wiele godzin na przekopywanie internetu (to forum też) i nic. W sumie nie wiem czy robię coś nie tak czy takie działanie jest w ogóle możliwe. Liczę na to że ktoś na forum mnie oświeci. Z góry dziękuję i pozdrawiam wszystkich. Myślę że ten kod który zamieszczam wystarczy. Piszę pierwszy post więc jeśli coś nie tak wybaczcie.

    Definicja menu

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


    wywołanie funkcji obliczającej

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


    kod funkcji

    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: 29 wrz 2020, o 07:42 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    Rzutowanie zrobiłeś źle. W wywołaniu funkcji nie musisz rzutować bo każdy typ można przypisać do void. Konieczne jest rzutowanie albo wewnątrz funkcji albo nadanie konkretnego typu w nagłówku. Tak czy inaczej przy takim ukształtowaniu typów nie obejdzie się bez dwóch funkcji.
    Typ void to proteza, której należy unikać i stosować w przypadkach absolutnie niezbędnych. Ten przypadek taki nie jest.
    dinosaurus napisał(a):
    różnią się tylko jednym elementem

    To dlaczego nie zastosować jednego typu z polami next_menu dla drugiego poziomu równymi NULL? Kosztem większego zużycia pamięci zyskuje się spore uproszczenie. Na początkowym etapie zmagań z językiem ma to swoją wartość.
    Inną opcją, która tu doskonale pasuje, jest zastosowanie dziedziczenia. Wtedy ma się niemal pełną kontrolę typów (upcasting jest całkowicie w gestii kompilatora, downcasting wymaga nadzoru programisty), a jednocześnie jest możliwość dowolnego ukształtowania typów i podtypów danych.

    ------------------------ [ Dodano po: 27 minutach ]

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



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


    Wywołanie funkcji dla danych o typie roszerzonym wymaga albo rzutowania do typu bazowego albo podania wskaźnika na pole zawierajace typ bazowy
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    _________________
    Think for yourself and question authority.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 wrz 2020, o 18:11 
    Offline
    Nowy

    Dołączył(a): 30 sie 2020
    Posty: 4
    Pomógł: 0

    Dzięki za tak szybką i wyczerpującą odpowiedź.
    Na pierwszy pomysł to sam wpadłem ale tak mi się spodobała wersja z typem void że koniecznie chciałem go zastosować no i przy okazji się nauczyć. Pomysł z dziedziczeniem i w C to dla mnie co najmniej za wcześnie. Znam programowanie obiektowe ale w innych językach i na PC.. Do nauki C podchodziłem kilka razy ale to nie jest język łatwy do nauki nawet gdy zna się nieźle inne języki. Może tym razem dzięki książkom p. Kardasia i temu forum opanuję ten język choć w zakresie programowania AVR-ów dla własnej przyjemności.
    Jeszcze raz dzięki - pozdrawiam.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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