wtorek, 16 października 2018

C - Sprawdzanie czy przekroczono zdefiniowany odcinek czasu

W tym krótkim poście chciałbym przedstawić sposób implementacji dokładnego obliczania czy przeminął zadany okres czasu.

[Źródło: https://icons.com/icon/40670/c-programming]


Program:

Główne zadanie tej funkcji polega na sprawdzeniu czy zadany odcinek czasu został już przekroczony czy jeszcze nie. Można ją zastosować w celu określenia czy dane zdarzenie wystąpiło po zadanym okresie czasu.

Jest to chyba najprostszy sposób sprawdzenia tej wartości gdy pobrany czas jest dostępny jako osobne zmienne.

  1. static uint8_t checkTimeInBuffer(uint32_t secondsToWait,
  2.                 uint8_t hourRTCStart, uint8_t minutesRTCStart, uint8_t secondsRTCStart,
  3.                 uint8_t hourRTCActual, uint8_t minutesRTCActual, uint8_t secondsRTCActual)
  4. {
  5.     uint32_t testValue = calculateSeconds(hourRTCActual, minutesRTCActual, secondsRTCActual) calculateSeconds(hourRTCActual, minutesRTCActual, secondsRTCActual);
  6.  
  7.     if(testValue < secondsToWait)
  8.     {
  9.         return 1; //Nie przekroczono czasu
  10.     }
  11.  
  12.     return 0; //Czas zostal przekroczony
  13. }
  14.  
  15. uint32_t calculateSeconds(uint8_t hour, uint8_t minutes, uint8_t seconds)
  16. {
  17.     return (hour* 3600) + (minutes * 60) + seconds;
  18. }

Funkcja jest dosyć prosta więc nie ma sensu się tutaj specjalnie rozpisywać. Jako parametry przekazywane jest ilość sekund do odczekania, godzina wystąpienia danego zdarzenia oraz aktualny czas. W funkcji obliczana jest ilość sekund jakie upłynęły od pojawienia się zdarzenia do czasu pobrania aktualnych danych z zegara. Następnie sprawdzamy czy odczekaliśmy wystarczającą ilość czasu i na tej podstawie zwracamy podaną wartość.