需求:树莓派 接pcf85063a RTC模块进行时间同步,上层使用Qt 开发应用,进行时间的读取与设置
一,树莓派配置:
/boot/config.ini 文件 修改
二,读取时间 直接读取系统时间
TIME TimerManager::getSystemLocalTime()
{
TIME t;
time_t timep;
struct tm *p;
time(&timep);
p = localtime(&timep);
t.year = 1900+p->tm_year;
t.month = 1+p->tm_mon;
t.day = p->tm_mday;
t.hour = p->tm_hour;
t.minute = p->tm_min;
t.second = p->tm_sec;
return t;
}
三,设置时间 先设置系统时间,然后将系统时间 同步到rtc
bool TimerManager::setSystemLocalTime(TIME time)
{
extern int errno;
struct tm p;
struct timeval tv;
//获取时区 保存在tz中
gettimeofday(&tv,NULL);
p.tm_year = time.year-1900;
p.tm_mon = time.month-1;
p.tm_mday = time.day;
p.tm_hour = time.hour;
p.tm_min = time.minute;
p.tm_sec = time.second;
time_t utc_t = mktime(&p);
tv.tv_sec = utc_t;
tv.tv_usec=0;
if(settimeofday(&tv,NULL)!=0){
char *mesg = strerror(errno);
LOGI("setSystemLocalTime error {} {} {} ",tv.tv_sec,errno,mesg);
return false;
}
//系统时间写道硬件里
QProcess::execute("sudo hwclock -w");
return true;
}