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

kłopot z flagą w przerwaniu
https://forum.atnel.pl/topic22245.html
Strona 1 z 1

Autor:  wojciechgorzolka [ 9 maja 2019, o 20:23 ]
Tytuł:  kłopot z flagą w przerwaniu

hej. dawno mnie tu nie było. Ale to dlatego,że zająłem się własną edukacją i niestety nie miałem czasu na programowanie uC.
Postanowiłem znów zasiąść do zestawy ATB i jest klops.
Przerabiam dla ćwiczeń multipleksowanie z poradnika Pawła Kardasia na YT. I mam kłopot z kodem w pętli głównej. Samo multipleksowanie działa mi super. Napisałem dodatkowo kod, który zlicza godziny i minuty. Jeśli w pętli głównej motorkiem napędzającym, a raczej zwalniającym będzie poczciwy delaj, to cyferki pięknie zliczają czas na wyświetlaczu siedmio segmentowym. Kłopot mam jeśli zamiast delaja chcę wrzucić zliczanie z przerwania. Coś źle robię i nie mogę dojść do tego, gdzie robię błąd. Wrzucam kod z delajem w pętli głównej, oraz z flagą z przerwania. Proszę o podpowiedź. :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A tytaj koz bez delaja:


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



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


i kod z deklaracją zmiennej tykanie:

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


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


Ewidentnie jest coś nie tak ze zmienną tykanie. Niestety nie wiem w czym rzecz.



edytuję post.
Już mi się coś rozjaśniło po rozmowie z Darkiem. CHyba to ogarnę :)

Autor:  jez2000 [ 10 maja 2019, o 05:24 ]
Tytuł:  Re: kłopot z flagą w przerwaniu

A czemu ty dajsz to extern?? Masz w innym pliku zdefiniowaną zmienną tykanie??


Poza tym ten warunek

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Będzie się wykonywał prawie cały czas bo zmienna tykanie == 0 jest tylko 1/20 tyknięć timera

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

Wtedy warunek wykona się jak tykanie==0 ale pozostaje jeszcze jeden problem, że pętla znów wykona się wiele razy gdy tykanie == 0 bo zmieni się dopiero przy kolejnym tyknięciu timera ( od tyknięcia do tyknięcie pętla główna wykona się wiele razy)

A najprosciej chyba bylo by gdyby w przerwaniu zwiejszac te zmienne licznik1 licznik2... a petla glowna niech sobie śmiga bez żadnego delay

Autor:  wojciechgorzolka [ 10 maja 2019, o 11:37 ]
Tytuł:  Re: kłopot z flagą w przerwaniu

tak, tykanie jest w innym pliku, dlatego jest extern. Wczoraj myślałem intensywnie i będę przerabiał kod. Mam już koncepcję, zobaczę co mi z tego wyjdzie :) Ale dziękuję za podpowiedzi

Autor:  jez2000 [ 10 maja 2019, o 11:46 ]
Tytuł:  Re: kłopot z flagą w przerwaniu

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

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

Bo nigdzie nie widac :)

Autor:  Zealota [ 10 maja 2019, o 13:06 ]
Tytuł:  Re: kłopot z flagą w przerwaniu

wojciechgorzolka napisał(a):
tak, tykanie jest w innym pliku, dlatego jest extern.

To oznacza, że ten plik, gdzie masz definicję zmiennej, nie jest kompilowany.

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


a zapis:
#ifndef MULTIPLEKS_MULTIPLEKS_H_
sugeruje, że plik ma końcówkę "multipleks.h" a ty inkludujesz "multipl.h" zatem masz duże pomieszanie z poplątaniem.
Powyższy, mylący zapis z #ifndef może powodować, że preprocesor pomija niektóre wpisy, pomimo, że nie widać "wyszarzeń" w IDE.
Chyba, że piszesz w innym edytorze dobrze byłoby go wskazać, a tak na slepo trochę.

Na próbę zdefiniuj w pliku main.c "volatile uint8_t tykanie", powinieneś dostać inne błędy, ale może kompilacja przejdzie.
Jeśli przejdzie to i tak to nie rozwiąże problemu, ale znaczy się, że bałagan w projekcie jest znacznie większy niż przypuszczam :)

Autor:  wojciechgorzolka [ 10 maja 2019, o 15:58 ]
Tytuł:  Re: kłopot z flagą w przerwaniu

dzięki :)

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