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



Teraz jest 8 mar 2026, o 01:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 26 gru 2014, o 12:47 
Offline
Użytkownik

Dołączył(a): 07 paź 2014
Posty: 28
Pomógł: 0

Witam

Nie wiedzieć czemu program mimo poprawnej kompilacji nie działa jak powinien. W przerwaniu chciałem obsługiwać klawisze, które by zmieniały zmienną do obsługi menu. Niestety wyświetlanie menu "show_menu()" wygląda jakby tylko raz się wykonywało. Testowałem (do testów użyłem lcd_puts(buf) w przerwaniu) i przerwanie zmienia wartość menu_pos ale funkcja, która by miała wyświetlać menu nie reaguje na te zmiany. Poniżej kod:

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


menu.c

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


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


Jeśli ręcznie zmienię menu_pos na inną wartość to show_menu wyświetli zgodnie z "if'ami" jak należy jeśli jednak manipuluję tą zmienną z przerwania niestety nic się nie dzieje. Co ciekawe gdy wcisnę klawisze "enter" wyświetla sie napis "enter" (tak jak jest ustawione w przerwaniu i już tak zostaje nie znika.. jakby funkcja wyswietlająca menu wykonywała się tylko raz na samym początku. Czy ktoś może widzi jakiś błąd? Może to jakaś oczywista oczywistość a ja nie potrafię tego zauważyć.

Co ciekawe funkcje "debugujące" lcd_puts(buf) w funkcji "show_menu" na ekranie nie zwracają nic - pusty ekran aż do naciśnięcia "enter". W przypadku obecnie wykomentowanego kodu, pokazują menu dla pozycji zależnej od menu_pos ustawionego w main.c.. niestety nie reaguje jak wspomniałem na zmianę.

EDIT:

Spróbowałem jeszcze taki test w main.c:

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




Dzieje się to samo. Jakby pętla while wykonywała się tylko raz.. przy naciśnięciu lewo/prawo nic się nie dzieje cały czas jest na wyświetlaczu "0" gdy nacisnę "enter" pojawia się napis "enter" i już nie znika.

EDIT2:

Próbowałem również zablokować przerwania na czas wykonywania "set_var":

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


Nie pomoglo :/

EDIT 3 - PROBLEM ROZWIAZANY

Problemem okazała się funkcja delay w przerwaniu. Przerwanie wykonywało się tak długo, że nie było czasu na główną funkcję.. wystarczyło odpalić przewodnik z przerwaniam Mirka :). Jednak teraz mam nowy problem gdyż sprawdzanie wciśniętego klawisza odbywa się tak szybko, że przeskakuje od 0 - 5 przy jednym naciśnięciu. Jak to teraz rozwiązać?

EDIT 4 - PROBLEM CALKOWICIE ROZWIAZANY

Udało mi się rozwiązać drgania styków bez użycia "delay" za pomocą następującego przerwania (co przerwanie sprawdzam czy dany klawisz jest wciśnięty i zwiększam zmienną kontrolną o jeden). W ten sposób idzie idealnie wysterować switch bez przerywania głównej funkcji programu:

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



Pozdrawiam
//holo



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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