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