eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaBiblioteka standardowa time.h i mikrokontrolery › Re: Biblioteka standardowa time.h i mikrokontrolery
  • Data: 2018-09-13 07:46:46
    Temat: Re: Biblioteka standardowa time.h i mikrokontrolery
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Hmm... Wygląda na to, że problem leży głębiej i dotyczy raczej RTC
    (ewentualnie funkcji bibliotecznych odpowiedzialnych za odczytywanie
    czasy), niż biblioteki standardowej time.h.

    Zgodnie z sugestiami, które tu padły, zastąpiłem usunąłem swoją własną
    wersje funkcji time() i napisałem własną wersję _gettimeofday.

    int _gettimeofday (struct timeval* tp, struct timezone* tzp) {
    RTC_TimeTypeDef timeStruct;
    RTC_DateTypeDef dateStruct;
    struct tm dstTime;

    HAL_RTC_GetTime(&hrtc, &timeStruct, RTC_FORMAT_BIN);
    HAL_RTC_GetDate(&hrtc, &dateStruct, RTC_FORMAT_BIN);
    dstTime.tm_hour = timeStruct.Hours;
    dstTime.tm_min = timeStruct.Minutes;
    dstTime.tm_sec = timeStruct.Seconds;
    dstTime.tm_year = dateStruct.Year + 100;
    dstTime.tm_mon = dateStruct.Month - 1;
    dstTime.tm_mday = dateStruct.Date;

    if (tp) {
    tp->tv_sec = mktime(&dsttime);
    tp->tv_usec = 0;
    }

    if (tzp) {
    tzp->tz_minuteswest = 0;
    tzp->tz_dsttime = 0;
    }

    return 0;
    }

    Następnie w pętli głównej usunąłem gmtime(), zamiast tego wyświetlając
    na LCD aktualna wartość zwracaną przez time(). Efekt był dość...
    Dziwny... Mianowicie liczba złożona z dwóch ostatnich cyfr faktycznie
    zwiększała swoją wartość o jeden co sekundę. Natomiast trzecia, czwarta
    i piata cyfra od końca co chwilę zmieniała swoją wartść "tam i z
    powrotem" - raz było 500 z czymś, potem ponad 600, potem znów 500 z
    czymś i tak dalej...

    Postanowiłem więc zrobić eksperyment i stworzyłem zmienną uint32_t _rtc,
    która była zwiększana o 1 w przerwaniu alarmu RTC. Podpiąłem ją do
    funkcji _gettimeofday i problem zniknął.

    Ktoś wie gdzie może leżeć przyczyna takiego zachowania? Co robię nie tak
    czytając RTC? Przykład u góry.

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: