【问题标题】: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() 并分析输出本身。不仅仅是错误代码

标签: c date microcontroller epoch


【解决方案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(),它很好地解决了我的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多