为啥 gmtime() 函数返回 NULL?

Posted

技术标签:

【中文标题】为啥 gmtime() 函数返回 NULL?【英文标题】:Why gmtime() function returns NULL?为什么 gmtime() 函数返回 NULL? 【发布时间】:2016-07-25 00:08:31 【问题描述】:

我正在尝试使用 epoch 时间在 STM32L051T6 微控制器上设置 RTC 时间。所以下面是我的代码。

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 作为参数传递。一切都失败了。代码有什么问题?

【问题讨论】:

您能否在 else 语句中致电 perror 以了解发生了什么? 你确定TIME_T 是一个有效的time_t var? 移除演员表。如果您收到编译器警告/错误,则意味着代码一直都是错误的。您需要修复代码,而不是抑制警告。 @purplepsycho perror 打印“无错误(errno = 0)” 尝试使用 gmtime_r() 并分析输出本身。不仅仅是错误代码 【参考方案1】:

我在这里找到了以下内容: http://support.raisonance.com/content/gmtime-and-localtime-broken-arm-gcc-lib

所以可能没有实现....

我认为 STM32F10x 的 arm-gcc 库中的 gmtime 和 localtime 已损坏。

我已经在 keil uVision 中尝试过并且在那里工作正常(无论如何都是本地时间, gmtime 未在 keil 中实现)。 gmtime 和 localtime 正在搜索 _sbrk 链接时。

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

【讨论】:

我已经更新了上面的代码,就像你有问题一样。还是不行。 好的,然后检查您平台的文档,gmtime 可能没有实现。【参考方案2】:

我使用 localtime() 函数而不是 gmtime(),它很好地解决了我的目的。

【讨论】:

以上是关于为啥 gmtime() 函数返回 NULL?的主要内容,如果未能解决你的问题,请参考以下文章

“DateTime.Now” - 为啥它返回 GMT?

Perl的timelocaltime和gmtime函数

Linux学习笔记八:时间和延时gmtime和local函数返回相同

为啥这个 MySQL 函数返回 null?

为啥函数返回的值总是 null 或 undefined?

c++ OpenProcess() 函数返回值为啥返回NULL 急需解决!!! 邮箱372199852@qq.com