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 w 2025? 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 11 maja 2025, o 09:33


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 43 ]  Przejdź na stronę Poprzednia strona  1, 2
    Autor Wiadomość
    PostNapisane: 30 sty 2019, o 12:34 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Po poprawieniu w pliku menu.c nie mam błędów.
    Nie kompiluje się do hex, ale w konsoli jest "multiple definition ...".
    Obrazek
    Nie wprowadzałem zmian w plikach.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sty 2019, o 15:23 
    Offline
    Moderator
    Avatar użytkownika

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

    Wirnick napisał(a):
    "multiple definition ...

    no a co dalej po tych kropkach masz ? .... jak byk "of main"

    czyli masz w projekcie co najmniej dwa pliki z funkcją main - to jak chcesz żeby ci się to skompilowało - czytaj komunikaty do końca ;)

    _________________
    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: 30 sty 2019, o 16:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 31 mar 2015
    Posty: 310
    Pomógł: 18

    Znalazłem babol - w pliku "pwm.c" był drugi main. Skasowałem plik i jest OK.
    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 31 sty 2019, o 11:06 
    Offline
    Użytkownik

    Dołączył(a): 17 gru 2018
    Posty: 29
    Pomógł: 0

    Sprawdziłem kod na płytce, przypisałem również klawisze do sterowania, natomiast wymagany jeszcze jest timer do odświeżania LCD , żeby to wszystko działało. No i za bardzo mi to nie wychodzi...Sprawdziłem w GB inicjalizację mechanizmu buforowania LCD void buf_lcd_init(void), natomiast wykorzystane jest tam zdarzenie barrel, którego nie mam swoim kodzie. Czy ktoś mógłby pomóc mi z timerem w inny sposób do moich bibliotek i funkcji?

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


    menu.h :

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


    przyciski do sterowania :

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


    Będę wdzięczny za wszelką pomoc, trochę mnie czas goni, a ja już czuje zmęczenie z tego wszystkiego :|



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 31 sty 2019, o 15:15 
    Offline
    Użytkownik

    Dołączył(a): 17 gru 2018
    Posty: 29
    Pomógł: 0

    Próbowałem 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.


    oraz zdjęcie efektu przed i po timerze...
    Obrazek

    mam nadzieję, że jakaś świeża głowa to wyłapie :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 31 sty 2019, o 15:31 
    Offline
    Moderator
    Avatar użytkownika

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

    Gammadion napisał(a):
    mam nadzieję, że jakaś świeża głowa to wyłapie

    Moja głowa nie jest już taka świeża bo latka lecą - no ale ten program z twoją funkcją main() nie ma prawa w ogóle działać, po starcie od razu się zawiesi, wyłączy przerwania i tak będzie wisiał w nieskończoność.

    Zajrzyj jednak do Bluebooka do podstaw - polecam - tym bardziej, że masz Bluebooka ...

    co MUSI być w funkcji main() ?

    chyba pętla główna - a u ciebie jest ?

    _________________
    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: 31 sty 2019, o 15:41 
    Offline
    Użytkownik

    Dołączył(a): 17 gru 2018
    Posty: 29
    Pomógł: 0

    Ajj teraz spojrzałem, nie wrzuciło mi się main.c po poprawkach. Wygląda to teraz tak:

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    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: 31 sty 2019, o 18:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1170
    Lokalizacja: Kraków
    Pomógł: 93

    A gdzie włączasz timer? Masz zakomentowaną konfigurację. Może gdzieś w funkcji jest? Ale nie wywołujesz tego...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lut 2019, o 13:35 
    Offline
    Użytkownik

    Dołączył(a): 17 gru 2018
    Posty: 29
    Pomógł: 0

    wywołuje w buf_lcd_init(), której timer jest opisany na samym dole w menu.c. Tamten chwilowo zakomentowałem, jego odkomentowanie nie pomaga.

    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: 2 lut 2019, o 15:52 
    Offline
    Użytkownik

    Dołączył(a): 22 kwi 2017
    Posty: 99
    Lokalizacja: Piła
    Pomógł: 4

    W procedurze obsługi przerwanie timer_flag ustawiasz na 1(co 16,38 ms) i w pętli głównej dwa posty wyżej timer_flag też ustawiasz na 1, a więc co obieg pętli. To chyba nie powinno tak być. Musisz sprawdzić czy odpala Ci się przerwanie?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lut 2019, o 20:50 
    Offline
    Użytkownik

    Dołączył(a): 17 gru 2018
    Posty: 29
    Pomógł: 0

    timer_flag wyrzuciłem. Zrobiłem to w inny sposób. Zmieniłem funkcję lcd_refresh, w taki sposób aby mogła być wywoływana w pętli głównej i żeby można było sprawdzać flagę zajętości:

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


    Co do timera0 - ustawiony na reagowanie na przepełnienie, przerwanie overflow:

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


    pętla główna :

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


    Wynikiem jest napis programator + ">" i litera "A" w 2 wierszu, 2 kolumnie.
    Mogę się mylić ale brakuje jakiejś zmiennej w funkcji buf_lcd, źle rozpisaną mam obsługę przerwania albo brak zmiennej w pętli while(). Użyłem też takiego sformułowania : while(check_BF()!= 0x80). Po tym mam coś takiego:
    Obrazek

    Jeżeli ktoś miałby chwilę i chęci żeby rozpisać mi jak to powinno wyglądać, żeby menu zadziałało, innymi słowy dał tą przysłowiową "rybę", to będę niezmiernie wdzięczny. Pozwoli mi to ruszyć dalej z programem, a na tę chwilę jestem w kropce.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 lut 2019, o 21:58 
    Offline
    Moderator
    Avatar użytkownika

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

    No to żeś panie narobił sobie grochu z kapustą - że aż strach ... aż ciężko to analizować ... po prostu koszmar

    pomijam już milczeniem to, że w procedurze obsługi przerwania wykonujesz tak drastycznie długotrwałe operacje jak wyświetlanie na LCD to jeszcze do tego można powiedzieć, że wyrżnąłeś "wątrobę" ze zdrowego organizmu :lol: czyli mechanizm sprawdzania flagi zajętości LCD i przyszyłeś tę wątrobę poza ustrojem, czyli gdzieś w kodzie głównym programu - no masakra ;) i ty się dziwisz że coś ci tam nie działa ... a jeszcze tą jakąś funkcją lcd_refresh() chlastasz jak maczetą po całym ciele ... oczywiście ciele programu nawet w przerwaniach ... Panie panie - taki program ma prawo a nawet obowiązek działać dokładnie jak teraz ci działa - czyli nie działa ...

    ------------------------ [ Dodano po: 3 minutach ]

    ja bym na twoim miejscu - stworzył mały projekt testowy najpierw tego z czym masz problem i łatwiej byłoby ci testować - ale wywal że z tego testu ten cały zbędny balast czyli coś tam z silnikami nie silnikami itp

    Już nie wspomnę, że w GB masz przykład takiego buforowanego wyświetlania, który działa idealnie i widziałeś tam gdzieś takie rzeczy jakie zrobiłeś w swoim kodzie czyli to wybebeszanie biblioteki LCD ? albo co gorsze wyświetlanie na LCD w przerwaniach ? Wszędzie się trąbi i na forum ale i w Bluebooku co i rusz piszę aby przerwania były jak najkrótsze a ty tam LCD zasadzasz - no to tak ... to jak tu w ogóle coś pomóc jak idziesz kompletnie pod prąd

    _________________
    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: 3 lut 2019, o 13:23 
    Offline
    Użytkownik

    Dołączył(a): 17 gru 2018
    Posty: 29
    Pomógł: 0

    No nieźle, nieźle ;) Tak więc wziąłem sobie do głowy Wasze rady. Wywaliłem tę lcd_refresh i wróciłem do poprzedniej postaci :

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


    Tak samo zrobiłem key_init, wyrzuciłem(zakomentowałem) niepotrzebne na razie funkcje, powołałem zmienną volatile uint8_t fRefresh i main.c wygląda następująco :
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    w menu.c timer (<- czy jest dobrze opisany?? )
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    dziobak7 napisał(a):
    Inna ważna rzecz. Jeśli masz 3 poziom zagnieżdżenia w funkcji, to jest coś nie tak z Twoim rozumieniem kodu (pominę wyjątki bo to nie jest na tyle skomplikowana aplikacja).
    3 poziom zagnieżdżenia funkcji - który fragment masz na myśli?

    dziobak7 napisał(a):

    Następne... jeśli masz gdzieś zmienną typu flaga, z zasady powinna być ustawiana w 1 miejscu (znanym Ci) i testowana oraz ew. gaszona w 2. Dodatkowo, jej zmiana (czyli zapis), prawie zawsze powinna być zabezpieczona operacją atomową (poczytaj o ATOMIC_BLOCK). A jak jest teraz?


    Trochę poczytałem o tym, ale czy to jest tak potrzebne do mojego kodu i nie można pozostać przy timerze? Ewentualnie opierając się na powyższym kodzie z timerem i przerwaniami, jakbyś to zrobił, wykorzystując ATOMIC_BLOCK?

    dziobak7 napisał(a):
    Dodaj do kompilatora flagi:

    -Wall -Wextra -Wshadow -pedantic

    Masz to wydzielone w opcjach kompilacji w eclipse. Inne flagi są także bardzo przydatne ale powyższe wystarczą by pokazać Ci kilka(naście) potencjalnych błędów jakie popełniłeś. Przyjmij zasadę (na początek) że kod ma się kompilować bez ostrzeżeń.
    Gdzie dokładnie mogę to znaleźć w eclipsie? Co do samej kompilacji kodu, nie wyrzuca mi żadnych błędów i ostrzeżeń.



    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: 43 ]  Przejdź na stronę Poprzednia strona  1, 2

    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO