-
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.
Następne wpisy z tego wątku
- 13.09.18 08:37 Jacek Radzikowski
- 13.09.18 09:03 Atlantis
- 13.09.18 09:05 Atlantis
- 13.09.18 09:14 Jacek Radzikowski
- 13.09.18 11:18 Grzegorz Niemirowski
- 14.09.18 09:33 Atlantis
- 14.09.18 11:00 Grzegorz Niemirowski
- 14.09.18 11:09 Marek
Najnowsze wątki z tej grupy
- Było 83V
- Stare komputery
- Odbiornik ADS-B i wzmacniacze
- Thunderbird i dysk...
- opornosc falowa
- Bateria 9V 6F22, alkaliczna v cynkowa, samorozładowanie, bateria wysokiej trwałości do miernika
- Tani zakup z ali?
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
Najnowsze wątki
- 2025-07-28 Warszawa => Sales Executive / KAM <=
- 2025-07-28 Było 83V
- 2025-07-28 Białystok => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-28 Warszawa => Dyrektor Sprzedaży (rozwiązania Cloud) <=
- 2025-07-28 Białystok => Delphi Programmer <=
- 2025-07-28 Warszawa => Specjalista/stka ds. Organizacji <=
- 2025-07-28 Warszawa => Senior Key Account Manager IT <=
- 2025-07-28 Warszawa => Software Engineer .Net <=
- 2025-07-28 Białystok => Programista Delphi <=
- 2025-07-28 Warszawa => MENA New Business Manager <=
- 2025-07-28 Stare komputery
- 2025-07-28 Warszawa => Junior Rekruter <=
- 2025-07-28 cinkciarz.pl
- 2025-07-28 Warszawa => Młodszy Specjalista ds. wsparcia sprzedaży <=
- 2025-07-28 Warszawa => Developer Microsoft Dynamics 365 Finance & Operations (D36