嵌入式Linux的RTC读写操作应用

嵌入式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);
    
}
相关推荐
动词ing37 分钟前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
Elastic 中国社区官方博客1 小时前
Elasticsearch:使用 AI Agent 来创建 workflow
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·全文检索
测试运维日常笔记1 小时前
Linux系统安装配置TigerVNC服务器完整指南
linux·运维·服务器
喜欢的名字被抢了2 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
雾时之林2 小时前
Linux----cron定时服务
linux·运维·服务器
小雨笙笙2 小时前
C语言:变量三属性——存储类型
c语言·开发语言
zlinear数据采集卡3 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
壹玖玖肆3 小时前
医院后勤智能运维系统实用性评测
运维
Navigator_Z3 小时前
LeetCode //C - 1192. Critical Connections in a Network
c语言·算法·leetcode
布莱克6054 小时前
理解 C/C++ 中的 void* 指针
c语言·c++