Forum: Mikrocontroller und Digitale Elektronik C Bibliothek "time.c"


von Kai (Gast)


Lesenswert?

Hallo,

ich benutze einen STM32 inc. RTC.
Zur Zeitberechnung verwende ich die C Standard Bibliothek "time.c".

Wie definiere ich für diese Bibliothek meine Zeitzone ?

Meine Funktion

int gettimeofday(struct timeval *tv, struct timezone *tz)
{
    uint32_t tick = HAL_GetTick();      /* uptime in ms */

    tv->tv_sec = tick / 1000;
    tv->tv_usec = (tick % 1000) * 1000;

    return 0;
}

bekommt für den Pointer *tz ein NULL

von Nop (Gast)


Lesenswert?

Kai schrieb:

> Meine Funktion
>
> int gettimeofday(struct timeval *tv, struct timezone *tz)

Da ist eine Zeitzone doch ohnehin unsinnig, weil diese Funktion die Zeit 
seit power-up zurückgibt, und die hat außerdem nach 24 Tagen einen 
Überlauf.

von Kai (Gast)


Lesenswert?

Nop schrieb:
> Da ist eine Zeitzone doch ohnehin unsinnig, weil diese Funktion die Zeit
> seit power-up zurückgibt, und die hat außerdem nach 24 Tagen einen
> Überlauf.

Stimmt auch wieder.

Ich bekomme nach Programm Start die aktuelle UTC Zeit.
Diese möchte ich in der Bibliothek setzen und anschließend bei Bedarf 
mit

time_t t;
struct tm * ts;

t = time(NULL);
ts = localtime(&t);

das aktuelle Datum auslesen.

---

Nun stellt sich mir die Frage
- Wie setze ich die aktuelle UTC Zeit nach Programm Start in der 
Bibliothek
- Wie setze ich die Zeitzone ?

von Dr. Sommer (Gast)


Lesenswert?

Ich denk du benutzt die RTC? Warum setzt du nicht in der RTC das 
Datum+Uhrzeit in der gewünschten Zeitzone, und fragst es direkt (ohne 
irgendwelche Bibliotheksfunktionen) ab? So bekommst du automatisch die 
lokale Zeit und musst nix rechnen.
Die RTC musst du nur ein einziges mal setzen (ich denke mal die hat eine 
Backup-Batterie), mit UTC musst du dann auch nicht rumfummeln.

von Kai (Gast)


Lesenswert?

Ich habe einen externen RTC Chip aus dem nach Programmstart die UTC Zeit 
ausgelesen wird. Das funktioniert auch. Allerdings möchte ich nun 
verschiedene Berechnungen mit der aktuellen Zeit und anderen Zeiten 
machen. Die Bibliothek habe ich noch nie benutzt, würde mir aber helfen.

Ich finde überall Informationen wie man sie benutzt aber nicht wie ich 
sie initialisiere.

von Dr. Sommer (Gast)


Lesenswert?

Kai schrieb:
> Ich habe einen externen RTC Chip aus dem nach Programmstart die
> UTC Zeit
> ausgelesen wird.
Warum benutzt du nicht die interne? Ist doch viel einfacher.

Kai schrieb:
> Ich finde überall Informationen wie man sie benutzt aber nicht wie ich
> sie initialisiere.
Weil die Initialisierung vom Betriebssystem vorgenommen wird. Da du 
vermutlich keines hast, musst du nachschauen, wie deine 
Standard-Bibliothek das macht, denn das ist nicht vom C-Standard 
definiert. Da du auch nicht gesagt hast welche du nutzt, kann dir dabei 
keiner helfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.