嵌入式Linux的RTC读写操作应用
一、前提
嵌入式开发中经常有碰到读取和修改时间的需求,所以会经常用到RTC这个功能。首先保证你的开发板上具有RTC这个模块和支持RTC且能正常工作,然后再进行应用程序的编写。你可以使用date
命令和hwclock
命令查看系统时间和RTC时间,初步检验是否具有RTC时钟。
二、头文件引用
c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/rtc.h>
三、设置RTC时间
c
void setRtcTime(int year,int mon,int mday,int hour,int min,int sec)
{
struct rtc_time rtc_tm;
int fd = open("/dev/rtc0", O_RDONLY);
ioctl(fd, RTC_RD_TIME, &rtc_tm);
rtc_tm.tm_year=year-1900;
rtc_tm.tm_mon=mon-1;
rtc_tm.tm_mday=mday;
rtc_tm.tm_hour=hour;
rtc_tm.tm_min=min;
rtc_tm.tm_sec=sec;
ioctl(fd,RTC_SET_TIME,&rtc_tm);
close(fd);
}
四、读取RTC当前时间
c
void getRtcTime(void)
{
struct rtc_time rtc_tm;
int fd = open("/dev/rtc0",O_RDWR);
if(fd<2)
{
printf("%s 设备文件打开失败.\n");
}
ioctl(fd, RTC_RD_TIME, &rtc_tm); //如果需要写进去此处改为RTC_SET_TIME,后面先赋值再ioctl
printf("应用层读取的时间: %d-%d-%d %d:%d:%d\n",
rtc_tm.tm_year+1900,
rtc_tm.tm_mon+1,
rtc_tm.tm_mday,
rtc_tm.tm_hour,
rtc_tm.tm_min,
rtc_tm.tm_sec);
close(fd);
}