RTC获取时间戳,使用mktime获取到的时间戳不正确?

发布于 2020-12-09 19:35:26

RTC获取时间戳,使用mktime获取到的时间戳不正确?

因为不定时的会发现时间不正确,跳到了2037年,而寄存器并未出错。
1.jpg
2.jpg

所以在程序RTC驱动文件中,获取RTC寄存器部分的代码加入rt_kprintf,来打印时间戳,检查错误,结果发现mktime出来的时间戳有问题,然而又找不到这个函数的定义。请大佬给个解决思路。
Snipaste_2020-12-09_19-32-33.jpg

查看更多

关注者
0
被浏览
445
3 个回答
张世争
张世争 2020-12-10

mktime 函数,

 rt-thread\components\libc\compilers\common\time.c

2020-12-10_144043.png

sync
sync 2020-12-10

`

/* get current time */
now = time(RT_NULL);
/* lock scheduler. */
rt_enter_critical();
/* converts calendar time time into local time. */
p_tm = localtime(&now);
/* copy the statically located variable */
memcpy(&tm_new, p_tm, sizeof(struct tm));
/* unlock scheduler. */
rt_exit_critical();
sprintf(pstr, "%04d-%02d-%02d", (int)(tm_new.tm_year + 1900), (int)(tm_new.tm_mon + 1), (int)tm_new.tm_mday);

`
楼主看下获取时间应该这么操作下

simonliu009
simonliu009 2021-02-24

我也遇到了这个问题。time(0)返回值开机正常,但是在进行一些操作以后就返回一个负值。此时和寄存器的值对比,寄存器的值是正确的。
按照上面的方法,使用临界区保护也不行。用localtime_r也不行。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览