------------------------------------------------------------------------ my_time Version fuer SDCC-Compiler ------------------------------------------------------------------------ my_time ist eine Softwarebibliothek, die wie die Standardbibliothek time.h aus einem Zeitstempel ein dazugehoerendes Datum oder aus einem Datum einen Zeitstempel berechnen kann. Der Einfachkeit halber wird im Gegensatz zu time.h NICHT mit Zeigern gearbeitet (was einen etwas hoeheren RAM-Speicherbedarf zur Folge hat. Der Zeitstempel hier ist eine einfache 32-Bit Integervariable. Diese Variable berechnet fuer ein bestimmtes Datum, wieviele Sekunden seit dem 01.01.1970 00:00.00 vergangen sind (sofern das define < yearofs > nicht veraendert wird. Hieraus ergeben sich gueltige Daten (Daten ist der Plural von Datum): 01.01.1970 00:00.0 bis 06.02.2106 06:28.15 my_time wurde geschrieben, um auf einfache Weise mit einem Datum bspw. fuer einen Datenlogger oder eine Zeitschaltuhr rechnen zu koennen. Das Zaehlen von Sekunden und aufaddieren zu Minuten, Stunden usw. wird hiermit hinfaellig, es muss nur noch zu einem Zeitstempel die entsprechenden Sekunden hinzuaddiert oder subtrahiert werden. Um bspw. eine Uhr zu programmieren muss lediglich in einem Interrupt- vektor, der jede Sekunde aufgerufen wird, der Zeitstempel inkrementiert werden. my_time deklariert eine Struktur, mydate_time deren Member year, month, day, hour, min, sec beinhalten. Hiervon wird in my_time.c eine globale Variable < mydate > erstellt: mydate_time mydate; Das Beschreiben der Struktur geschieht hier wie mit jeder anderen Struktur auch: mydate.year= 2024; mydate.month= 7: mydate.day= 1; mydate.hour= 19; mydate.min= 34; mydate.sec= 33; Um aus dieser Struktur einen Zeitstempel zu generieren bedarf es des Aufrufes von uint32_t mydate_getstamp(); sekcount= mydate_getstamp(); Die Variable < sekcount > enthaelt nun die Anzahl Sekunden, die seit dem 01.01.1970 vergangen sind, fuer das Datum 01.07.2024 | 19:34.33 entspricht dieses 1719862473. Um aus einem gegebenen Zeitstempel ein Datum zu generieren muss die Funktion void(mydate_get uint32_t stamp) aufgerufen werden: sekcount+= 3600; mydate_get(sekcount); Das Datum in < mydate > ist hier nun eine Stunde spaeter als vor dem Aufruf Ein Wochentag kann mittels < char mydate_getwtag(void) > ermittelt werden: char wochentag; wochentag= mydate_getwtag(); Der Rueckgabewert von < mydate_getwtag > beginnt mit 0 und dieses repraesentiert den Tag Sonntag. Der 01.07.2024 war ein Montag und demzufolge wird beim obigen Aufruf der Wert 1 zurueck geliefert. Definierte Funktionen ------------------------------------------------------------------------ ------------------------------------------------------------------------ void mydate_get(uint32_t stamp); ------------------------------------------------------------------------ Ermittelt aus einem Zeitstempel (Sekunden die seit dem 01.01.1970 00:00.00 vergangen sind) das Datum und aktualisiert die globale Variable mydate mit dem Datum, das dem Zeitstempel entspricht Uebergabe: stamp : Anzahl Sekunden seit dem 01.01.1970 ------------------------------------------------------------------------ uint32_t mydate_getstamp(void); ------------------------------------------------------------------------ Ermittelt aus einem Kalenderdatum der globalen Variable mydate den Zeitstempel (vergangene Sekunden seit dem 01.01.1970 00:00.0) Uebergabe: keine Rueckgabe: Zeitstempel in Sekunden ------------------------------------------------------------------------ char mydate_getwtag(void); ------------------------------------------------------------------------ Berechnet zur globalen Variable mydate den Wochentag (Algorithmus nach Carl Friedrich Gauss): Uebergabe: keine Rueckgabe: der Tag der Woche, beginnend ab Sonntag. Sonntag entspricht 0. Bsp.: 01.07.2024 06:03.08 Rueckgabewert ist hier 1 und somit entspricht diese Datum dem Kalendertag Montag.