eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaRóżny czas pomimo synchronizacji z NTPRe: Różny czas pomimo synchronizacji z NTP
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!wsisiz.edu.pl!.POSTED!not-for-mail
    From: Atlantis <m...@w...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Różny czas pomimo synchronizacji z NTP
    Date: Wed, 12 Nov 2014 20:00:50 +0100
    Organization: http://www.wit.edu.pl
    Lines: 37
    Message-ID: <m40ap2$eds$1@portraits.wsisiz.edu.pl>
    References: <m3ua09$pji$1@portraits.wsisiz.edu.pl>
    <54631e12$0$11152$65785112@news.neostrada.pl>
    <m3vc6j$boc$1@portraits.wsisiz.edu.pl>
    <m3vf68$l11$1@portraits.wsisiz.edu.pl>
    <54634628$0$2844$65785112@news.neostrada.pl>
    <m3vhgb$sa6$1@portraits.wsisiz.edu.pl>
    <a...@n...neostrada.pl>
    <m3vl01$7ni$1@portraits.wsisiz.edu.pl>
    <m3vm1h$beo$1@portraits.wsisiz.edu.pl>
    <m3vmov$dau$1@portraits.wsisiz.edu.pl>
    <a...@n...neostrada.pl>
    <m3vrph$t12$1@portraits.wsisiz.edu.pl> <m401dh$ov$1@node1.news.atman.pl>
    NNTP-Posting-Host: aaac161.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: portraits.wsisiz.edu.pl 1415818850 14780 83.4.2.161 (12 Nov 2014 19:00:50
    GMT)
    X-Complaints-To: a...@w...edu.pl
    NNTP-Posting-Date: Wed, 12 Nov 2014 19:00:50 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101
    Thunderbird/24.6.0
    In-Reply-To: <m401dh$ov$1@node1.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:673850
    [ ukryj nagłówki ]

    Hmm... Nie wydaje mi się, żeby tu chodziło tylko o zajmowanie cykli
    procesora przez operacje na zmiennych 32bitowych w przerwaniu.
    Trochę przerobiłem program:

    1) Zwiększyłem czas pomiędzy kolejnymi przerwaniami do 20 ms.
    2) Przeniosłem obsługę niekrytycznych timerów do pętli głównej. Nic
    złego się nie stanie, jeśli od czasu do czasu odczyt jakiegoś czujnika
    opóźni się o sekundę albo uptime będzie pokazywał wartość zafałszowaną o
    kilka sekund.

    W tej chwili procedura obsługi przerwania wygląda następująco:

    ISR(TIMER0_COMPA_vect) {
    twenty_millis++;

    if (twenty_millis > 50) {
    geiger_pulses[seconds] = TCNT1;
    TCNT1 = 0;
    seconds = (seconds + 1) % 60;

    one_second_tick = 1;

    if (rtc) rtc++;

    twenty_millis = 0;
    }
    }

    Normalnie jest to tylko inkrementacja jednej zmiennej ośmiobitowej. Raz
    na sekundę dochodzi do tego jeszcze kilka operacji na zmiennych
    szesnastobitowych oraz inkrementacja zegara (zmienna 32bit), jeśli czas
    został już pobrany. Trochę trudno mi uwierzyć, że zajmuje to więcej niż
    20ms...

    Poza tym jest jeszcze jedna dziwna sprawa - parę razy tuż po wymuszonej
    synchronizacji czasu zauważyłem opóźnienie wynoszące np. 3 albo i 10
    sekund. Przecież niemożliwe, żeby taka wartość nabiła się w kilka sekund!

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: