mokrowski napisał(a):
Ja teorię mniej-więcej znam...
Chodzi mi raczej o przykład praktycznej implementacji algorytmu, który robiłby to wszystko w sposób zautomatyzowany. Parę pomysłów mam, nie wiem jednak, czy są one najbardziej optymalnymi rozwiązaniami.
Na chwilę obecną mam:
1) Synchronizację przez NTP
2) RTC zliczający sekundy w formacie uniksowym.
3) Procedurę konwertującą podany czas (Unix timestamp) do formy czytelnej dla człowieka i zapisującą go do struktury z rozbiciem na godziny, minuty, sekundy, dni itp.
Ten zestaw jest w tej chwili wykorzystywany do oznaczania pomiarów oraz modyfikacji plików (FatFS) za pomocą czasu UTC.
Mój pomysł na rozwiązanie jest następujący:
1) Dodać procedurę stwierdzającą na podstawie podanej daty i godziny, czy mamy do czynienia z czasem letnim, czy zimowym. Kilka przykładów jest w sieci.
2) Przy konwersji z unix timestamp do struktury podawać czas na zasadzie (timestamp + offset*ILOSC_SEKUND_NA_DZIEN), jeśli tylko chcemy uzyskać na wyjściu czas lokalny.
3) Cyklicznie wywoływać funkcję sprawdzającą, czy mamy do czynienia z czasem letnim czy zimowym. Wynik jej działania zapisywać w osobnej zmiennej globalnej uint8_t offset. W takim wypadku jak częste powinny być wywołania? Wystarczy przy każdej pełnej minucie czy może jeszcze rzadziej?
A może istnieje bardziej optymalny sposób? Może da się w jakiś sposób zorientować jaki mamy czas już podczas konwersji z czasu uniksowego do struktury?