跟涛哥一起学嵌入式 28:Linux下的时间管理和定时器编程

2023-10-28 12:30

本文主要是介绍跟涛哥一起学嵌入式 28:Linux下的时间管理和定时器编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

时间是我们生活中非常重要的一个概念,我们的生活处处离不开时间:你跟朋友定在晚上7点去吃火锅;你老板让你半个小时后去他办公室;还有一周就要放假过年了...。在现代社会中,没有时间的度量,我们的生活将寸步难行。除非你去终南山隐居,去过日出而作,日落而息的生活。

计算机中处处需要时间

在计算机系统中,也是处处需要时间,离开时间寸步难行:你的电影播放时间、系统日志log、QQ 微信聊天记录、电脑每周一次的杀毒、清理垃圾、软件更新,都需要时间。包括操作系统的任务调度,给每个进程分配运行时长,也需要时间。

生活中的时间可分为绝对时间和相对时间:公元2020年1月24日,你的电脑开机时间,这些可以算是绝对时间;万历15年、昨天今天和明天,则是相对时间。其实,相对时间和绝对时间并没有一个清晰的划分概念,一切时间可能都要以某一个时刻为起点,都是相对时间。绝对时间也是一种特殊的相对时间,因为大家都使用默认的参考起点,所以一般就看做绝对时间了。

你沐浴在温暖在阳光里,我在漆黑的夜里沉睡。由于地球自转的原因,世界各地的日落日出时间不一样,因此也引出了时区的概念:全球划分为24个时区,以伦敦的本初子午线为准,往东叫东X区,往西叫西X区。如伦敦时间凌晨0点,因为我们在东八区,太阳比伦敦早8个小时升起,所以我们的时间就是早上八点。

 

v2-c71fc94944961937829c48f1753624c7_b.jpg

伦敦的时间,也就是子午线0时区的时间,一般称为格林威治时间(GMT,Greenwich Mean Time),又称作世界协调时间( UTC,Coordinated Universal Time)。计算机中一般保存的就是这种世界标准时间,以1970年1月1日零时零分0秒为起点,记录到现在的秒数。但是世界各地的电脑显示的一般是本地时间,会将世界标准时间结合你本地电脑设置的时区,转换为本地时间并显示在电脑桌面的右下角。

 

时间的计量

戴过手表的同学可能都有过这种经历:每过一段时间就会发现自己的手表时间不准了,需要校准。为什么不准了呢?很简单,计时出现了误差。到哪里校准呢?很简单,每天晚上7点的新闻联播,很多人开始掏出自己的手表开始调时。为什么要以新闻联播为准呢?还得从计时器的发展历程说起。

古时候科技不发达,古人只能观天计时:日出日落、月圆月缺、春夏交替、四季轮回,发明了阳历和阴历。这种计时的精度只能以天来计算。后来古人发明了各种计时设备:日晷、沙漏、刻漏等,将计时精度推进了小时级别。但是这种计时器误差很大,四季太阳高度的变化、冬天夏天刻漏的滴水口的热胀冷缩,都会影响计时的精度。

 

v2-3b6bb96f1553d0b5a3a29b08600e0a49_b.jpg

后来欧洲人发明了机械钟,使用发条或单摆作为动力,把计时的精度推进到了秒级。比较有代表性的就是瑞士手表,可以说是机械钟的巅峰之作,风靡了几个世纪。

 

v2-e016642732155b75edf3e17869ee6084_b.jpg

电的出现和电子技术的发展,将计时器又推向了一个高度:采用晶振计时。给适应振荡器两边加电压,晶振就会发出规律的正弦波,再经过整形就可生成周期频率的方波,方波再讲过分频或倍频,就可以引入到CPU或SOC的内部,作为计时的时钟之源。

 

v2-711d8c1de5085dcea95c9b6d404be1b3_b.jpg

采用晶振计时的电子设备,一般精度可以达到微秒级别,多少年的计时误差可能只差1秒。现在的计算机或电子设备一般都采用这种晶振计时,给晶振两端加电压就可以让他永远振荡下去,唯一的缺陷就是当电脑或手机关机时就无法计时了。因此现在的计算机一般都有两个计时器,其中一个单独供电,比如我们电脑上的主板上就有一个CMOS电池给实时时钟供电,当电脑关机时,实时时钟仍可以继续计时。等你下次开机,你会发现时间一直很准确,这里面就有主板上的CMOS实时时钟的功劳。

随着时间流逝,不同计算机的计时也会出现或快或慢的误差。尤其是互联网时代,不同计算机之间进行通信,更需要时间同步。那该如何是好?不用担心,一种更精密的计时器出来了:铯原子钟。它是根据铯原子的原子跃迁产生振动磁场的振荡周期来作为原子时间的标准,误差是千万分之一秒。世界上第一个原子钟由美国国家物理实验室建造,作为世界标准标准时间之源。后来世界各地的实验室纷纷建立自己的实验室,作为本国的授时中心。如我国位于西安的中科院国家授时中心,新闻联播的实时报时就是以此为时间之源的。

 

v2-de70ad146231f8ddc74327f96734ea26_b.jpg

除了铯原子钟外,还有氢原子钟、铷原子钟等计时设备。在一些对时间要求比较高的航空航天、军事科研领域,一般会购买这种精密的计时设备,作为时间之源。

 

v2-17cece6c963d14f010d4ba815b4cf3f7_b.jpg

Linux中的时间管理

想对时间进行管理,光有硬件还不行,还需要软件的配合。在Linux系统中,内核中会对这些定时器进行设置,一般每隔 10ms 来一个时钟中断,即时钟节拍。每一次时钟到期产生中断后,内核中有一个叫jiffies的全局变量,用来记录系统启动以来发生中断的次数,因为时钟发生中断是周期性的,因此可以用来计时。

 

v2-5d2fe4ba5057aad9a878b325b483a275_b.jpg

为了计时准确,内核中使用另外一个全局变量 xtime 来记录实时时间:当系统启动后,内核会从CMOS上的实时时钟读取实时时间,保存到 xtime 变量中,随后随着时钟中断,不断更新 xtime 和 jiffies这两个值。关机时,内核再把实时时间 xtime 保存到CMOS主板上的实时时钟内,这样断电后,计算机仍可以使用独立电源实时计时。

 

时间管理和定时器编程

用户通过Linux操作系统提供的系统调用 或 C标准库函数的 API,可以方便的获取系统时间、设置系统时间,以及使用计算机的定时器进行编程,周期性地去做一些事情:比如定期杀毒、垃圾清理、软件升级等。

《Linux系统编程》第08期:时间管理和定时器编程,视频教程已经发布,将会给大家介绍Linux系统下关于时间的获取、设置、定时器编程的各种 API 接口的使用。CSDN学院搜课程名称或讲师名字“王利涛”即可。

 

这篇关于跟涛哥一起学嵌入式 28:Linux下的时间管理和定时器编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/293230

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta