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



Teraz jest 29 mar 2024, o 00:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 14 sie 2018, o 07:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 gru 2014
Posty: 88
Pomógł: 2

Witajcie
nie mam pewności czy dobrze zrozumiałem fragment kodu dotyczący obsługi zdarzenia GetNtpTime_EVENT( &stimers[1].cnt , 10,0,0, NULL ); Poglądowo i dużym skrócie cod:

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


Nie mogłem zrozumieć dlaczego działa funkcja (f.) GetNtpTime_EVENT( &stimers[1].cnt , 10,0,0, NULL ); bo f.timer_init( 1, 5000, 0, NULL ); określa
wszystkie parametry stimer[1] (1-index tablicy/timera, 5000-interval 5s, 0- enable OFF (1-ON), NULL nie wykorzystujemy własnej funkcji callback-owej)
3-ci parametr funkcji timer_init (enabled) mając wartość 0 wyłącza timer1, f. TIMERS_EVENT nie wywoła dla stimer[1] f. timers_process
bo wartość wyrażenia if( stimers[1].enabled ) jest FALSE inaczej mówiąc bez wywołania f.timers_process nie może wykonać się: wywołanie f.callback oraz ponowne załadowanie licznika cnt.
Jednak dekrementacja stimers[1].cnt dokonuje się w przerwaniu Timera2 f. tmr_irq_tick dla każdego licznika stimers[i].cnt niezależnie od wartości parametru
enabled dlatego po osiągnięciu warności 0 (stimers[1].cnt) wykonają się instrukcje zawarte w f.GetNtpTime_EVENT wartość licznika stimers[1].cnt jest przekazana zmienną wskaźnikową stąd wyrażenie
if( !*tmr_10ms ) będzie miało wartość TRUE i instrukcje zawarte w f.GetNtpTime_EVENT zostaną wykonane po 5s od startu programu a wiec po wartości jaką określono f.timer_init( 1, 5000, 0, NULL ).
Wykonanie instrukcji zawartych w f.GetNtpTime_EVENT( &stimers[1].cnt , 10,0,0, NULL ) określi nową wartość *tmr_10ms = 10; (100ms) oraz czas/okres synchronizacji NTP zmienną co_ile_czasu ja dla testu ustawiłem 10s chciałem ten proces częściej obserwować na wyświetlaczu.

Proszę Was o info czy to co napisałem jest TRUE or FALSE



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2018, o 08:03 
Offline
Moderator
Avatar użytkownika

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

Ja bym chętnie pomógł (i nie piszę tego teraz złośliwie czy coś) ... ale napisałeś taki zbitek myśli, bez żadnego przecinka czy kropki prawie - wszystko jednym ciurkiem ...

ale ok opiszę w skrócie jak działa ten mechanizm bo być może coś ci umknęło.

1. to jest CAŁKOWICIE inne podejście niż z Bluebooka

2. przygotowana została fajna funkcja napędzająca timery programowe o nazwie tmr_irq_tick(); którą wystarczy odpalać w jakimś timerze sprzętowym odpalanym np co 10ms ... ale wtedy nie jest kompletnie potrzebny ten IF (To jest podobne z kolei podejście jakie pokazałem w bibliotece Matrix KEYBOARD https://www.youtube.com/watch?v=b1dAuBJm7EQ , gdzie też wystarczy do przerwania timera sprzętowego co 10ms - dodać małą napędzającą obsługę klawiatury/klawiszy ;) )

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


opisuję przecież w YB skąd się wziął ten IF, ale przypomnę, wykorzystałem bowiem przerwanie które odbywa się 5x szybciej niż 10ms i stąd zrobiłem licznik i warunek IF, żeby funkcja obsługująca timery programowe wykonywała się jednak co 10ms a nie szybciej. Jeśli sam tworzysz timer sprzętowy napędzany co 10ms to w ogóle ten IF jest przecież niepotrzebny


3. Argument timera ON/OFF nie jest do tego, żeby nie działał jego counter. On będzie zawsze tykał jeśli timer powołany jest do życia. Parametr ON/OFF mówi o tym czy ma być odpalane zdarzenie timera programowego o ile podłączyłeś do niego jakąś funkcję. Bo jeśli jako ostatni parametr dałeś NULL to argument ON/OFF będzie ignorowany.


4. funkcja GetNtpTime_EVENT() może działać ponieważ przekazujemy do niej tylko wskaźnik do countera jednego z powołanych timerów programowych ;) ona go wewnątrz zagospadarowuje na swoje potrzeby ;) ... ale jakbyś chciał to równie dobrze mógłbyś podłączyć jeszcze swoje zdarzenie (swoją funkcję) zamiast tego NULL przy definicji tego timera. Wtedy w oparciu o jeden timer programowy działałby i GetNtpTime_EVENT() i twoja funkcja. Tyle że GetNtpTime_EVENT() panuje nad counterem i zmienia jego zawartość więc trzeba mieć to na uwadze

_________________
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 sie 2018, o 08:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 gru 2014
Posty: 88
Pomógł: 2

Dzięki Mirek za odp. jest zgodna z moim "zbitkiem" no wiesz jak się mieli coś długo to właśnie później wychodzi taka mielonka.

Jednak nie zgodzę się z tym co napisałeś w p.4
"... ale jakbyś chciał to równie dobrze mógłbyś podłączyć jeszcze swoje zdarzenie (swoją funkcję) zamiast tego NULL przy definicji tego timera"
o ile dobrze rozumiem w tym przypadku f.timer_init( 1, 5000, 0, NULL ) jest to niemożliwe bo nawet gdyby napisać własną
funkcję callbacko-wą np f.migaj_led to żeby ona miała szansę zadziałać musi zostać wywołana f. timers_process a tak się w tym przypadku nie dzieje.
No chyba, że nie zrozumiałem tego co miałeś na myśli, bo oczywiści gdyby było tak f.timer_init( 1, 5000, 1, migaj_led ) to ok f.callback migaj_led się odpali.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2018, o 08:49 
Offline
Moderator
Avatar użytkownika

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

Jak to się nie odpali - jak odpali ;)

Tylko musisz argument ON dać na 1 ;) ... ale też mówię - że GetNtp coś tam robi z counterem i nie pamiętam teraz co - więc zajrzyj do jej środka

_________________
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 sie 2018, o 09:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 gru 2014
Posty: 88
Pomógł: 2

Dziękuję za odpowiedź i wyjaśnienie wątpliwości jaką miałem,

pozdrawiam.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 10 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