2016-04-05 4 views
0

Я пытаюсь установить время RTC на STM32L051T6 микроконтроллером, используя epoch раз. Итак, мой код.Почему функция gmtime() возвращает NULL?

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"); 
    } 
} 

Когда я вызываю функцию выше. Он всегда идет в if и выводит сообщение об ошибке. Я пробовал передавать значения 3600, 1459841178 в качестве аргументов. Все не удается. Что не так с кодом?

+0

Не могли бы вы назвать 'perror' в заявлении else, чтобы узнать, что произошло? – purplepsycho

+2

Вы уверены, что 'TIME_T' является допустимым' time_t' var? – LPs

+2

Удалить бросок. Если вы получаете предупреждение/ошибку компилятора, это означает, что код был неправильным все время. Вам необходимо исправить код, а не подавлять предупреждение. –

ответ

0

я использовал МестноеВремя() функцию вместо gmtime() и это хорошо работает решение своей цели.

1

Я нашел следующее здесь: http://support.raisonance.com/content/gmtime-and-localtime-broken-arm-gcc-lib

Так что не может быть реализована ....

Я думаю gmtime и LocalTime сломана рука-НКУ Lib для STM32F10x.

Я попробовал его в keil uVision и отлично работал там (местное время в любом случае, gmtime не реализовано в keil). gmtime и localtime ищет _sbrk при связывании.

"sbrkr.c: (.text + 0xc): неопределенная ссылка на` _sbrk '"

+0

Я обновил код выше, как и вы. Это все еще не работает. –

+0

ОК, затем проверьте документы для своей платформы, gmtime может не быть реализовано. – Laurijssen

Смежные вопросы