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



Teraz jest 30 mar 2026, o 22:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 22 ] 
Autor Wiadomość
PostNapisane: 8 lis 2015, o 20:33 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Witam wszystkich serdecznie. Próbuje skonstruować minutnik na przerwaniach. Jest to część pewnego projektu. Problem w tym że nie działa :) A mianowicie

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



C1 to dziesiątki minuty, C2 jedności minuty C3, dziesiątki sekundy i C4 jedności sekundy.
Próbuje wyświetlić to na wyświetlaczu LCD 16x2 dlatego też muszę konwertować cyfry funkcją itoa.
Do przerwania procesor wchodzi bo sprawdzałem lampką. Natomiast nie zmieniają się wartości zmiennych C1 itd. Co ciekawe program wgl nie wchodzi do if(licznik > 99 && SS_L==1 ) mimo że odpowiednio wcześniej ustawiam zmienna SS_L =1..

Jakieś pomysły dlaczego to nie chce zaskoczyć ? Specjalnie nie wyświetlam w przerwaniu żeby nie przedłużać..
I jeszcze pytanie pewnie retoryczne dla większości ale wole się upewnić. By takie dane się wyświetlały odpowiednio muszą być wyświetlane w pętli głównej programu a nie wyświetlane na sztywno, zgadza się?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 20:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 334
Lokalizacja: Rybnik
Pomógł: 55

masterix napisał(a):
Co ciekawe program wgl nie wchodzi do if(licznik > 99 && SS_L==1 ) mimo że odpowiednio wcześniej ustawiam zmienna SS_L =1..

Pewnie dlatego, że w żadnym miejscu nie zwiększasz wartości zmiennej licznik...

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 20:41 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

masterix napisał(a):
if(licznik > 99 && SS_L==1 )


a gdzie licznik++ ??

------------------------ [ Dodano po: kilkunastu sekundach ]

o kolega mnie uprzedził



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 20:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

ma tak stać w miejscu? - nie widzę jakiegoś
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


edit:
...niby zając a wlecze się :lol:

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 20:48 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

O ja (cenzored)... Ludzie przepraszam ze zawracam (cenzored).. Po prostu mi wstyd.. Siedze nad projektem którys dzień i takie (cenzored) mnie blokuje przez 2h.. :) ale dziękuje :)





Ocenzurowano ..... forum czytają nieletni oraz kobiety niekoniecznie ciężarne .... --> SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 20:55 
Offline
Użytkownik

Dołączył(a): 04 paź 2011
Posty: 8631
Pomógł: 338

zdarza się panie kolego ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 21:13 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Dobrze :) dziękuje jeszcze raz ale teraz tak, działa ale tylko jak wyświetlam w przerwaniu. Jak to wyświetlać w np. pętli głównej?
I drugie pytanie.. Jest tu pewien błąd. A mianowicie ładnie odlicza tylko przeskakuje. NP 1:31 i next 1:29. Wie ktoś jak się tego pozbyć ?

I przepraszam ze słowa w poście wyżej :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 21:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
masterix napisał(a):
Wie ktoś jak się tego pozbyć ?

...a wie ktoś w którym miejscu kodu Ci się to dzieje? ;)
W tej żonglerce literką "C" nie widzę błędu.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 21:50 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

A ja i owszem :) on omija pełne liczby takie jak 00:50 00:30 i pytanie jak to obejść, Bo w warunku jest C3>0 czyli liczy do 1 0 pomija i wskakuje na 9 od razu.. I tu sobie z warunkami poradzić nie mogę :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 22:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

zero też Ci policzy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 22:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Zastosuj zamiast zmiennych bez znaku uint8_t zmienne ze znakiem int8_t a w warunku dajesz np. c3 >= 0 i już zero nie będzie pomijane.
Pamiętaj tylko, że np. zmienna int8_t ma zakres od -128 do 127.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2015, o 23:31 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Ok :) dziękuje :) tak zrobię :) miejmy nadzieje że zmiana typu nie zawadzi w reszcie :) Dziękuje za szybką odpowiedź :)

----
Niestety warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nie działa.. a jak zmienie typ zmiennej to mi się minus wpierdziela..
a mnożenie przez -1 nic nie daje..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2015, o 07:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

nie działa..

Pokaż jak to robisz, bo ja Ci pokazałem w jaki sposób można to obejść, ale nie jedną linijką.
To taki zapis skrótowy.
A może zamiast takiego wyliczania zastosuj liczenie sekund, od nich liczenie minut; C "minutowe" liczyć za pomocą modulo od sekund.

edit:
... no właśnie kol.SylwekK też to zasugerował, tylko bardziej czytelnie :)

Pozdr.



Ostatnio edytowano 9 lis 2015, o 09:06 przez kicajek, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2015, o 08:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

A nie prościej by było zrobić w przerwaniu jeden licznik odliczający w dół co sekundę, a w pętli głównej dla otrzymania wyniku mm:ss odpowiednio formatować dla potrzeb wyświetlania? Weźmy, np. wartość takiego licznika ma 3400, kiedy podzielimy na 60 to w wyniku będzie 56 i jakaś reszta, ale wiadomo już, że to 56 to minuty. Analogicznie można to zrobić dla pełnych godzin. Przerwania w takim rozwiązaniu właściwie będą się nudzić, a kod będzie ładniej wyglądał.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2015, o 18:05 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Ok mam problem :) bo zmieniłem to żeby w przerwaniu był tylko znacznik a reszta minutnika była pętli głównej. Wszystko było ok a teraz wyskakuje mi taki oto błąd odnośnie przerwania... Miał ktoś kiedyś styczność z czyms takim ?

../praca_dyp_beta.c:337: error: static declaration of '__vector_10' follows non-static declaration
../praca_dyp_beta.c:337: error: previous declaration of '__vector_10' was here
../praca_dyp_beta.c:356: error: expected declaration or statement at end of input

mój główny plik programu :

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



I Jeżeli miałby ktoś jakieś zastrzeżenia do kodu pod względem programowania i podejścia do niego to proszę o krytykę (konstruktywną) bardziej zaawansowanych by dążyć do perfekcji :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2015, o 18:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Ręki nie dam, ale pewnie jakiejś klamry nie zamknąłeś, sprawdź to. Ja dla lepszej czytelności przy większym kodzie opisuje sobie komentarzami ważniejsze bloki, np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


...lub podobnie zależnie od kontekstu i czynności jakie warunek wykonuje. To naprawdę bardzo pomaga w odszukaniu ewentualnego błędu.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2015, o 18:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Przydałoby się przy tak rozrastającym się kodzie zacząć korzystać z tworzenia funkcji a nie wrzucać wszystko do main(). To bardzo ułatwia pisanie i późniejszą analizę.

EDIT: Oraz nie stosować w C polecenia goto ...

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2015, o 19:01 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Używam funkcji :) tylko że w main mam obsługę klawiatury która w tym while musi być :) i te wszystkie warunki odnośnie klawiszy musza być w tym miejscu bo inaczej ich nie wychwytuje.. a co do klamerek to zaraz przeanalizuje sobie wszystko :)



dziękuje rzeczywiście brakło klamerki :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2015, o 20:09 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Ale kolejny problem którego jednak nie udało mi się rozwiązać.. Jak zauważyliście robię projekt bomby. Sęk w tym ze jest mały problem.. A mianowicie podaje czas i kod potem zaczyna się odliczanie i kabuuuum jeżeli nie wpiszemy kodu i super bomba rozbrojona jak kod udało się wpisać. Jak rozbroimy to pięknie i można tak w kółko.. Ale jak wybuchnie to przy następnym ustawieniu wszystkiego i próbie rozbrojenia nawet gdy rozbroimy ładunek to zamiast wrócić do menu głównego to załącza się funkcja eksplozja i wszystko się na tym wiesza i tylko ON/OFF pomaga.. jakieś pomysły? Bo w sumie wczoraj mi to wszystko śmigało a dzisiaj taka heca i nie wiem jak sobie poradzić z tym.. do funkcji tej można dojść tylko jak czas się skończy w odliczaniu i po wpisaniu złego kodu.. wiec nie wiem skąd to się bierze



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2015, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Nie wiem co to jest, ale po "wybuchu" zerujesz
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Może ono za coś odpowiada.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2015, o 13:53 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

SS_L to flaga która uruchamia przerwanie związane z minutnikiem. wiec jeżeli ja zeruje to przerywam prace minutnika prawda?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2015, o 15:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
masterix napisał(a):
... wiec jeżeli ja zeruje to przerywam prace minutnika prawda?

...jeśli tak mówisz, to pewnie tak jest.
k.k. SylwekK i rskup już pisali o mało czytelnym kodzie i sposobie pisania - bez komentarzy i tak "jednym ciurkiem" ciężko patrzeć; dodatkowo na ekranie ECLIPSA same czerwone robaczki bo brakuje def_fun_glo.h. Nie każę go podawać ale tak cieżko - ja popatrzyłem co dzieje się "po wybuchu" i tylko to zauważyłem.

Pozdr.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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