为啥 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?的主要内容,如果未能解决你的问题,请参考以下文章