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



Teraz jest 6 lut 2025, o 08:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 14 lut 2016, o 12:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 sty 2014
Posty: 336
Lokalizacja: Grodzisk Mazowiecki
Pomógł: 13

Potrzebuję użyć kilku sekundowych opóźnień.
Napisałem taką funkcję opartą o timer która ma to zadanie spełnić.
Funkcja działa a ja chciałbym się upewnić czy to jest dobre rozwiązanie??

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


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

_________________
"Nie programuj w święta - bug się rodzi"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 12:20 
Offline
Moderator
Avatar użytkownika

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

Po pierwsze to powiedz - tzn zastanów się sam ... czym się różni twoja funkcja od _dela_ms() i w czym jest lepsza?

Ja bym powiedział, że owszem różni się tym, że nie dość, że marnujesz żeby nie powiedzieć marnotrawisz timer sprzętowy i to jeszcze o zgrozo timer 16-bitowy .... to twoja funkcja nadal jest tak samo blokująca jak _delay_ms() ...

Druga poważna wada to marnotrawienie cennych timerów sprzętowych na funkcje odliczające całe sekundy ?

Panie skunda dla timera sprzętowego to wieczność nie wspomnę już o minutach ... To tak jakbyś chciał obliczać czas przelotu statku kosmicznego pomiędzy dwoma galaktykami na sekundniku ? czy jest sens ? widzisz skalę ?

W podpisie widać, że masz Bluebooka - zajrzyj proszę do opisu timerów programowych. Wprawdzie do ich przygotowania również potrzebny będzie jakiś timer sprzętowy (ale zaledwie 8-bitowy wystarczy) .... to nie dość że zrealizujesz sobie takich timerów programowych ile chcesz, to każdy z nich będzie mógł sobie tykać np co sekundę, co kilkanaście sekund czy co kilkadziesiąt minut albo co kilka dni

ale nie to jest ważne - dzięki timerom programowym nie będziesz blokował działania programu tak jak to teraz tą funkcją chcesz zrobić ... co spowoduje sytuację jak w przysłowiu "zamienił stryjek siekierkę na kijek"

Jeśli zaś będziesz miał problem ze zrozumieniem działania timera programowego z BB (pokazanego tam na kilka różnych sposobów) to wtedy śmiało dopytaj ... KAŻDY, KAŻDY kto zrozumiał timery programowe w 8-bitowcach nie może już bez nich żyć i się obejść.

_________________
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: 14 lut 2016, o 13:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 sty 2014
Posty: 336
Lokalizacja: Grodzisk Mazowiecki
Pomógł: 13

Użyłem timera sprzętowego bo użyć musiałem. To że akurat ten, dlatego że mogę na nim mieć przerwanie właśnie co sekundę. Zgodzę się że to marnotrawienie ale skoro akurat do niczego więcej nie jest potrzebny to czemu nie?
Trafiłeś w sedno o które miałem wątpliwość. Ta funkcja jest nadal blokująca ale czy aby na pewno w 100%?
Co jeśli wykorzystam ją w programie gdzie będę wykorzystywał Uart. Czy przerwanie od Uarta będzie mogło w czasie trwania tej funkcji wykonać swoją robotę ? Lub przy przerwaniu INT czy one będzie blokowane przez ten czas ?
Dziękuje za informację i wracam do lektury BB :)

_________________
"Nie programuj w święta - bug się rodzi"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 15:22 
Offline
Moderator
Avatar użytkownika

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

Jak się mówi, że funkcja jest blokująca to absolutnie nie chodzi o blokowanie przerwań a tylko i wyłącznie o blokowanie programu - np pętli głównej ...

Jeśli w programie nic innego się nie dzieje jak piszesz to już bym wolał użyć: post153631.html#p153631 ;)

_________________
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: 14 lut 2016, o 18:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 sty 2014
Posty: 336
Lokalizacja: Grodzisk Mazowiecki
Pomógł: 13

Widziałem przedstawiany przez ciebie sposób ale on jednak bazuje na _delay_()
Wracając do programowych timerów z książki.
Miałeś na myśli timery użyte przy cyklicznym odczycie temperatury z DS1820 z wykorzystaniem modulo??
Jeżeli tak to oczywiście znam już tą metodę i zaczynam co raz częściej stosować.
Nie wiem jednak jak można by takiego sposobu użyć jednorazowo w funkcji main.

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

_________________
"Nie programuj w święta - bug się rodzi"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 19:19 
Offline
Użytkownik

Dołączył(a): 22 sie 2013
Posty: 73
Pomógł: 7

Wykorzystanie timerów programowych opisane jest również na blogu Mirka przy obsłudze przycisków. Zobacz tutaj http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html . Polecam


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 20:14 
Offline
Moderator
Avatar użytkownika

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

tomson5 napisał(a):
iałeś na myśli timery użyte przy cyklicznym odczycie temperatury z DS1820 z wykorzystaniem modulo??

Panie kochany - nie mów, że nie zajrzałeś do NAJWAŻNIEJSZEGO rozdziału w tym zakresie

"Wstęp do systemów czasu rzeczywistego" w którym to masz pokazane jeszcze inne podejście do timerów programowych, z którego prawie co drugi czytelnik już korzysta a tu na forum masz mnóstwo przykładów w kodach różnych userów ....

zajrzyj że pan do tego rozdziału i zobacz ;) zajrzyj mówię ci


Autor postu otrzymał pochwałę

_________________
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: 14 lut 2016, o 21:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 sty 2014
Posty: 336
Lokalizacja: Grodzisk Mazowiecki
Pomógł: 13

Ciągle się kręcę po wybranych rozdziałach i umknęło mi to.
Teraz już wszystko jasne. Dziękuje bardzo.

_________________
"Nie programuj w święta - bug się rodzi"



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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