嵌入式Linux的RTC读写操作应用
- 一、前提
- 二、头文件引用
- 三、设置RTC时间
- 四、读取RTC当前时间
一、前提
嵌入式开发中经常有碰到读取和修改时间的需求,所以会经常用到RTC这个功能。首先保证你的开发板上具有RTC这个模块和支持RTC且能正常工作,然后再进行应用程序的编写。你可以使用date
命令和hwclock
命令查看系统时间和RTC时间,初步检验是否具有RTC时钟。
二、头文件引用
#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时间
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当前时间
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,后面先赋值再ioctlprintf("应用层读取的时间: %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);}