嵌入式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);
    
}
相关推荐
三雷科技7 小时前
Claude Code 命令行完全指南:从高效交互到自动化工作流
运维·自动化·交互
拼搏的小浣熊7 小时前
香橙派Zero3的奇幻之旅【【持续更新】香橙派zero3从入门到玩转 各种工具+笔记】
arm开发·物联网·香橙派
正经教主8 小时前
【docker基础】第五课:Docker网络详解
运维·docker·容器
qq_163135758 小时前
Linux 【07-rm命令超详细教程】
linux
zh路西法9 小时前
【SSH 免密登录全流程】Windows Linux 通用方案
linux·windows·ssh
小黑蛋学java9 小时前
Nginx 接口耗时 Prometheus + Grafana 监控实施方案
运维·nginx·负载均衡·grafana·prometheus
ScilogyHunter9 小时前
GCC完全指南
linux·gcc
CodeStats9 小时前
从 CPU 指令到 JVM 进程:彻底讲透 Java 执行 main 方法时,类加载、主线程、栈帧入栈的完整底层逻辑
java·linux·开发语言
asyxchenchong88810 小时前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
tianyuanwo11 小时前
项目内自我管理:一名OS领域DevOps的破局之路
运维·devops