2016-04-05 6 views
0

Ich versuche, RTC-Zeit auf STM32L051T6 Mikrocontroller mit epoch Zeit einzustellen. Also folgt mein Code.Warum gibt die Funktion gmtime() NULL zurück?

void Rtc_SetTime(uint32_t time_) 
{ 
    struct tm* brokenTime; 
    const time_t temp = 3600; 

    brokenTime = gmtime(&temp); 

    if (NULL == brokenTime) 
    { 
     printf("Error: Failed to convert time.\r\n"); 
    } 
} 

Wenn ich oben Funktion aufrufen. Es geht immer auf if Anweisung und druckt Fehler. Ich habe versucht, die Werte 3600, 1459841178 als Argumente zu übergeben. Alles schlägt fehl. Was ist falsch an dem Code?

+0

Könnten Sie 'perror' in else aussagen, um zu wissen, was passiert ist? – purplepsycho

+2

Sind Sie sicher, dass 'TIME_T' eine gültige' time_t' var ist? – LPs

+2

Entfernen Sie die Besetzung. Wenn Sie eine Compilerwarnung erhalten, bedeutet das, dass der Code die ganze Zeit falsch war. Sie müssen den Code beheben, nicht die Warnung unterdrücken. –

Antwort

0

I verwendet localtime() -Funktion statt gmtime() und es funktioniert mein Zweck gut zu lösen.

1

fand ich das hier folgende: http://support.raisonance.com/content/gmtime-and-localtime-broken-arm-gcc-lib

So könnte es nicht umgesetzt werden ....

Ich denke gmtime und Lokalzeit für STM32F10x in Arm-gcc lib gebrochen.

Ich habe es in keil uVision versucht und funktioniert gut (localtime sowieso, gmtime nicht in keil implementiert). gmtime und localtime suchen beim Verknüpfen nach _sbrk.

"sbrkr.c: (.text + 0xc): undefined reference to` _sbrk '"

+0

Ich habe den obigen Code genau wie Sie in Frage aktualisiert. Es funktioniert immer noch nicht. –

+0

ok, dann überprüfen Sie die Dokumente für Ihre Plattform, gmtime ist möglicherweise nicht implementiert. – Laurijssen