linux学习笔记——linux系统的定时器

带你走进linux 内核 定时器(timer)实现机制 定时器层是基于tick层(高精度定时器)之上的,是根据系统jiffies来触发的,精度相对比较低。利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。经常,也会把这种低精度定时器称作时间轮(Timer Wheel)。在内核中,一个定时器是使用 timer_list 结构体来表示的: entry:所有的定时器都会根据到期的时间被分配到一组链表中的一个中,该字段是链表的节点成员。 expires:字段指出了该定时器的到期时刻,也就是期望定时器到期时刻的jiffies计数值。这是一个绝对值,不 阅读详情

在使用单片机时经常会用到定时中断。

但在linux环境下,无法直接访问定时器,但依然可以使用其它命令来完成定时操作。

比较常用的方法是使用signal(),ualarm()或者setTimer()函数。

要了解这三个函数的工作模式,必须了解linux系统中“信号”的概念。

linux中存在几十种信号,它们分别代表了不同的状态,有的代表终结程序,有的代表程序错误警告,程序员可以通过捕获这些信号,来获取系统状态。

其中,用于定时功能的信号叫做:SIGALRM

定时器可以每隔一段时间就触发依次SIGALRM信号,然后使用signal()函数跳转到中断执行程序中。

从使用方法的角度上来看,SIGALRM和中断信号INT没有区别,但原理上稍有不同。

具体区别是:SIGALRM是通过获取系统时间来计算的,而INT是通过硬件定时器完成的,显然INT的精度更高,更准确,更直接。

signal()函数有两个参数,第一个参数为触发信号,如果是定时功能,那就是SIGALRM;第二个参数为中断执行程序的函数名,例如:

signal(SIGALRM, sig_hander);

值得注意的是,如果没有中断执行程序,那么signal()默认在触发信号后终止整个程序。使用该函数需要包含signal.h。

那么如何触发SIGALRM呢,可以使用ualarm()或者setTimer()函数。

ualarm()函数可以按照设定的时间循环触发SIGALRM,它有两个参数,第一个参数是首次触发的时间,第二个参数是循环触发的时间,单位都是微妙。

例如:

ualarm(500000,100000);

函数就会在0.5秒后首次触发SIGALRM,并在之后以0.1秒的间隔不断触发SIGALRM。

注意:ualarm函数的定时时间不能超过一秒钟,如果需要更长定时,可以使用alarm函数,但该函数是单次定时。

使用ualarm()需要包含unistd.h。

而setTimer是ualarm的升级版,它具备更多功能,使用它需要包含sys/time.h

首先,它支持三种计时方法,可在第一个参数中选择,分别是:

1.系统时间计算,触发信号SIGALRM,参数名为ITIMER_REAL;

2.程序在用户态下花费的时间计算,触发信号SIGVTALRM,参数名为ITIMER_VIRTUAL;

3.程序在用户态和内核态下花费的时间计算,触发信号SIGPROF,参数名为ITIMER_PROF;

第二个参数指定间隔时间,第三个参数用来返回上一次定时器的间隔时间,如果不关心该值可设为NULL。

比较复杂的是,这个函数使用了嵌套结构体来传递参数,函数具体结构如下:

 1 int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));
 2 
 3   struct itimerval {
 4   struct timeval it_interval;
 5   struct timeval it_value;
 6   };
 7   struct timeval {
 8   long tv_sec;
 9   long tv_usec;
10   };

简单分析一下,外层结构体为itimerval,它的成员分别为it_interval和it_value的结构体。

而it_interval和it_value各自包含两个long型的成员,分别是tv_sec和tv_usec。

其中tv_sec的单位是秒,tv_usec的单位是微妙,二者相加就是定时的时间。

而it_interval是循环定时的时间,it_value是首次定时的时间。

示例:

struct itimerval timer;

//首次定时时长为1.5秒
timer.it_value.tv_sec = 1;
timer.it_value.tv_usec = 5000;

//以0.5秒为间隔循环定时
timer.it_interval.tv_sec = 1;
timer.it_interval.tv_usec = 5000;

以上就是linux系统中定时器的使用方法。

但是,linux下每个进程只有一个定时器资源,如果有多个需要定时执行的任务怎么办?

按我的理解,就只能使用多进程编程了,可以使用fork()函数创建新的进程。

不过多线程之间通讯又是一个问题,linux作为非实时操作系统在这方面确实有所欠缺。

系统时钟和定时器-学习笔记 鉴于上一篇文章的经历,本次分析先从源码做起。看看是不是有不一样的学习效果...仍然是按照韦东山老师的《嵌入式linux应用开发完全手册》来学习... 一、系统时钟和定时器 本次实验主要涉及四个方面: 1、设置启动MPLL 2、根据HCLK设置存储控制器 3、初始化定时器0 4、定时器中断 Makefile文件是不可缺少的一部分: objs := head.o init.o in 阅读详情

相关推荐

linux下多定时器的实现(经典)

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow                linux下多定时器的实现一、

ytfhjhv的博客 2554

Linux 中的几种定时器

在linux系统中定时器有分为软定时和硬件定时器。硬件定时器一般指的是CPU的一种底层寄存器,它负责按照固定时间频率产生中断信号,形成信号源。基于硬件提供的信号源,系统就可以按照信号中断来计数,计数在固定频率下对应固定的时间,根据预设的时间参数即可产生定时中断信号,这就是软定时。本文主要整理 Linux 系统开发中常使用的软定时器,而硬件定时器涉及到硬件手册这里略过。本文会在持续更新过程中将常用定时器逐一整理出来。alarm当时间到达__seconds秒后,进程会受到一个SIGALRM的信号。

私房菜 1万+

windows下的定时器(获取系统时间)和linux下的定时器(获取系统时间)

一、windows下的clock(): #include <stdio.h> #include <time.h> #include <windows.h> int main() { printf("startTime:%ld\n",clock()); Sleep(50);//50ms printf("endTime:%ld\n",clock()); r...

qq_34754747的博客 2509

linux下实现定时器的三种简单方式

linux下简单实现定时器效果的几种方法

qq_51368339的博客 6374

Linux系统下多个定时器的管理

,而linux则只允许单进程拥有一个定时器,因此在linux下的单进程中要使用多个定时器,则需要自己维护管理,这是本文写作的出发点

CAO527121128的专栏 1325

Linux 定时器 setitimer

阅读了《Unix/Linux系统编程》中关于定时器及时钟服务的部分,结合网上资料进行了整理 1. 相关概念 基于X86架构的个人计算机有数个定时器,包括实时时钟RTC、可编程间隔定时器PIT、多核CPU中的本地定时器、高分辨率定时器。 实时时钟RTC:RTC由一个小型备用电池供电,即使计算机关机时,它也能够连续运行。RTC用于实时提供时间和日期信息。由于RTC在电脑关机时继续运行,因此可以解释为什么开机后系统显示的时间与现实中保持一致。时间变量是一个长整数,即从1970年1月1日起经过的秒数。 2. 时钟相

Nick_Di的博客 1557

linux 时钟和定时器函数,嵌入式Linux学习笔记(七)-系统时钟和定时器

一、时钟体系和各类时钟部件1)s3c2440时钟体系s3c2440的时钟控制逻辑既可以外接晶振,然后通过内部电路产生时钟源,也可以直接外接提供的时钟源,它们通过引脚的设置来选择。时钟控制逻辑给整个芯片提供3种时钟:FCLK用于CPU核心,HCLK用于AHB总线上的设备,比如CPU核、存储控制器、中断控制器、LCD控制器、DMA和USB主机模块等,PCLK用于APB总线上的设备,比如watchdog...

weixin_39716971的博客 706

Linux内核编程(九)Linux内核定时器

Linux内核中有一个宏HZ,这个宏用来表示一秒钟对应的节拍的数量。利用Linux内核中的这个宏,我们就可以把时间转换成节拍数。比如,定时一秒钟换成节拍数就是expires=jiffies+1*HZ,其中宏定义jiffies为系统当前时间对应的节拍数。宏HZ的值我们是可以设置的,也就是说一秒钟对应多少个节拍数我们是可以设置的。打开make menuconfig图形化配置界面进行设置,具体设置路径查看其它博客。

qq_1033275663的博客 2308

arm linux 时钟源 信息,ARM学习笔记--系统时钟和定时器

摘自:《嵌入式Linux应用开发完全手册》——韦东山一、时钟体系和各类时钟部件1)s3c2440时钟体系s3c2440 的时钟控制逻辑既可以外接晶振,然后通过内部电路产生时钟源,也可以直接外接提供的时钟源,它们通过引脚的设置来选择。时钟控制逻辑给整个芯片提供3种时钟:FCLK用于CPU核心,HCLK用于AHB总线上的设备,比如CPU核、存储控制器、中断控制器、LCD控制器、DMA和USB主机模块等...

weixin_39791322的博客 466

Linux环境下的多线程定时器实现

在初始化函数中,我们将创建一个新的线程,用于计时和触发定时器事件。在启动函数中,我们将设置定时器的时间间隔,并在每个间隔内执行回调函数。通过这种方式,我们可以方便地创建和管理多个定时器,并在不同的时间间隔内执行各自的任务。我们将使用POSIX线程库(pthread)提供的函数来创建和管理线程,并使用Linux系统调用提供的定时器功能。在这段时间内,定时器线程将会在每个1秒的间隔内触发回调函数,并打印一条消息。在这个示例中,我们将定时器的时间间隔设置为1秒,并指定回调函数为。函数来启动定时器线程。

PixelNovaO的博客 599

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

下载地址在文末。我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。

hakesashou的博客 1万+

《嵌入式linux应用程序开发完全手册》系统时钟和定时器学习笔记系统时钟和定时器

<br /> 《嵌入式linux应用程序开发完全手册》系统时钟和定时器学习笔记 收藏 <br />系统时钟和定时器<br /> <br /> <br />一.系统时钟<br />(1) FCLK:用于CPU核<br />      HCLK:用于AHB总线上设备:CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块<br />PCLK:用于APB总线上设备:WATCHDOG、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI<br /> <br />(2

WSUPERSTAR的专栏 1294

麒麟V10 SP3国产化环境部署MySQL 8.0全流程实战

本文详细介绍了在国产化操作系统麒麟V10 SP3上部署MySQL 8.0的全流程实战指南。从环境准备、冲突排查到安装包处理、服务配置与安全加固,提供了详细的命令和技巧,帮助用户顺利完成MySQL 8.0的部署与优化,适用于国产化环境下的数据库应用。

weixin_29231027的博客 266

linux应用程序使用时钟中断,《嵌入式linux应用程序开发完全手册》系统时钟和定时器学习笔记...

系统时钟和定时器一.系统时钟(1) FCLK:用于CPU核HCLK:用于AHB总线上设备:CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块PCLK:用于APB总线上设备:WATCHDOG、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI(2 )开发板时钟频率为12 MHZ,通过PLL提高系统时钟:S3C2440包括MPLL和UPLL,UP...

weixin_28884741的博客 260

【DeepSeek+Office/WPS】智能办公新时代的全新利器

DeepSeek是一家专注于通用人工智能技术研发的中国科技公司,其核心产品DeepSeek-R1是一款开源的推理大模型,专注于复杂任务的高效处理,支持智能对话、文本生成、语义理解、计算推理、代码生成与补全等多种应用场景。作为国产、免费、开源且强大的AI平台,DeepSeek不仅致力于为终端用户提供高质量的智能服务,还为开发者提供了一整套完善的技术解决方案,帮助他们快速构建和部署自己的智能应用。

2303_77200324的博客 2791

RK3588+TRL8367s 四网口千兆交换机配置与优化实战

本文详细介绍了基于RK3588高性能SoC与TRL8367s千兆交换芯片构建四网口交换机的完整实战流程。内容涵盖硬件连接、设备树配置、内核驱动加载、性能优化及常见问题排查,重点解析了RGMII时序调试、DSA架构配置等关键步骤,为嵌入式网络设备开发提供实用指南。

weixin_29266647的博客 672

Linux定时器

Linux内核时间管理 系统时间管理需要一个硬件定时器提供时钟 ,通常这个定时器时通用的,有利于系统移植。 像UCOS 或 FreeRTOS 一般使用 Systick 作为系统时钟源(systick 是cortex-m 内核提供的定时器,芯片厂商在使用cortex-m内核制作芯片时为了通用性也会选择它作为芯片的硬件定时器)。 同样Linux 也需要一个定时器来驱动,Linux内核就是使用它来进行一系列的时间管理操作。(具体是什么不深究) Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时

weixin_48006170的博客 9305

vs code , 配置 claude code 插件, 默认选项 : --dangerously-skip-permission

摘要:本文介绍如何在VS Code中为Claude Code插件配置--dangerously-skip-permission参数,包含两种方法:图形界面设置(适合新手)和直接编辑settings.json(精准配置)。该参数会跳过权限检查,仅建议在本地测试环境中使用。配置后需通过命令面板验证参数是否生效,并注意安全风险,避免在生产环境使用。多参数配置时需用数组格式,不同版本插件可能键名略有差异。

AI天才研究院 4991

linux定时器

linux系统中定时器有很多种,alarm, select, setitimer, timer_create等等,这里只简单的介绍两种定时器,setitimer和timer_create。 1.第一种setitimer函数实现定时器 函数原型如下: /* 参数 which:(可选值如下) ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号。 ITIMER_VIRTUAL:以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。 ITIMER_PROF: 以该进程在用户

weixin_44522306的博客 8125

【LLM技术全景】规模定律与模型演进:为什么模型越大越强?

规模定律性能 ∝ 参数量^N性能 ∝ 数据量^M性能 ∝ 计算量^L其中 N, M, L 是小于1的正数(通常0.05~0.15)关键观察损失与规模的关系呈幂律(不是线性,也不是对数)三个要素(参数、数据、计算)需要协调增长只增加其中一个要素,收益会边际递减规模定律(Scaling Law):1. 模型性能与参数量、数据量、计算量呈幂律关系2. Kaplan定律(2020):参数量是主要因素3. Chinchilla定律(2022):数据和参数同等重要,最优比例1:20。

专注:太空算力、AI infra、异构调度、大模型成本工程 494

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:BLDC电机PID电流控制策略仿真

*无刷直流电机(Brushless DC Motor, BLDC)**因其高效率、长寿命和低维护成本,在众多领域如家用电器、工业自动化、电动汽车等得到了广泛应用。为了实现对BLDC电机的有效控制,通常采用基于霍尔传感器或反电动势检测的换相技术,并结合电流闭环控制以提高系统的动态响应和稳定性。本教程将带你使用构建一个基于PID控制的BLDC电机电流控制策略仿真模型BLDC电机建模PID控制器设计与应用系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 196

Linux内核系统定时器TIMER实现过程分析

本文系itspy原创,复制/转载请尽量标明原出处http://blog.youkuaiyun.com/yyplc/article/details/7065722,谢谢! Linux系统定时器,在内核中扮演着重要角色。内核的许多重要实现如任务调度,工作队列等均以系统定时器关系密切。系统定时器能以可编程的频率中断处理,这一中断叫做软中断。此频率即为每秒的定时器节拍数HZ。HZ的越大,说明定时器节拍越小,线程

自由枫~ 1万+

DCNv4+YOLOv8:2024最新可变形卷积赋能目标检测,从原理到实战的科研级优化指南

从理解DCNv4“自适应变形卷积核”的核心思想,到亲手将其嵌入YOLOv8并验证在复杂场景的检测效果,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解目标检测中“特征自适应提取”的核心价值。现在就开始行动,相信你会在目标检测的“自适应特征提取”之路上,走出一条属于自己的技术路径。实验通常会证明:嵌入DCNv4后,YOLOv8在复杂场景下的检测精度提升3-5个百分点,尤其是小目标和遮挡目标的AP提升更为明显,而推理速度仅下降5%-10%(可通过模型量化进一步优化)。2024年最新推出的。

m0_64661770的博客 267

linux系统中定时器使用方法,轻松学会Linux定时器的使用方法

我们知道在Linux中有着定时器这一个功能,通过使用定时器我们能够达到周期性的执行某一任务或者是到了一个指定时间去执行某一个任务的效果。对于Liunx初学者来说可能对此不太熟悉怎么运用,为此在本文中课课家笔者就为大家介绍几种Linux定时器的活用方法,让大家在对此有一个基本的了解。要想使用Linux中的定时器功能,我们可以通过三种方法来实现:①利用linux内部的三个定时器②利用sleep, us...

weixin_29483167的博客 2463

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

linux内核定时器

一、内核定时器简介: Linux 内核定时器使用很简单,只需要提供超时时间(相当于当前时刻)和定时处理函数即可,当超时时间到了以后设置的定时处理函数就会执行。在使用内核定时器的时候要注意一点,内核定时器并不是周期性运行的,超时以后就会自动关闭,因此如果想要实现周期性定时,那么就需要在定时处理函数中重新开启定时器。 二、几个基础概念 linux系统上,有两个非常重要的时间,墙上时间和系统运行时间。 系统运行时间:自系统启动开始所经过的时间 墙上时间:指当前时刻,可以通过ntp服务器获取,获取后可

wwwlyj123321的博客 3645

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Linux学习笔记】Linux内核定时器

在FreeRTOS中需要一个硬件定时器提供系统时钟,一般选用Systick作为系统时钟源。同理,Linux要运行也需要一个系统时钟。Linux内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、驱动常用的定时器。硬件定时器提供时钟源,时钟源的频率合一设置,设置好以后就周期性的产生定时中断,系统使用定时器中断来计时。

医疗嵌入式技术探索者 | 从硬件驱动到系统集成的全栈实践记录 833

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 电机控制(2)直流电机的simulink仿真
下一篇: 博世BMI088官方代码库解析
求你早点睡吧
博客等级 码龄7年 131粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值