前言 今天我们来评测linux内核的高精度定时器。顺便利用通过Tektronix示波器 和 DS100 Mini 数字示波器进行交叉测试。 因项目需要用到精准的时间周期,所以要评估它的可行性,并验证正点原子的示波器能不能支撑嵌入式开发流程。 Linux高精度定时器说明 其实传统的低分辨率定时器随着技术的演进,已经无法满足开发需求。而且硬件的不断发展,硬件定时器的精度也越来越高,这也给高精度定时器创建了有利条件。 低分辨率的定时大部分时间复杂度可以实现O(1),当有进位发生时,不可预测的O(N)定时器级联迁移
硬件架构 从硬件架构图中可以看出以下特点: 每个 CPU 核都包含各自的 local timer,相互独立。 每个 local timer 都支持中断的产生,中断类型为 PPI,即 CPU 的私有中断,GIC 负责分发到指定的 CPU,这些中断都可以用来产生系统事件。local timer的中断为以下四种: Secure Physical Timer event (ID 29,也就是上面device node中的13,29 = 16 + 13) Non-secure Physical Timer even
| 导语本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,本篇是中篇(主要讲抢占和时钟),上篇请看(CPU和中断):Linux调度系统全景指南(上篇),调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化,系统扩展性强,我们可以根据业务模型和业务场景的特点,有针对性的去进行性能优化,在保证客户网络带宽前提下,隔离客户互相之间的干扰影响,提高CPU利用率,降低单位运算成本,提高市场竞争力。欢迎大家相互交流学习!
作者简介: 程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。 一、时间概念解析 1.1 时间使用的需求 1.2 时间体系的要素 1.3 时间的表示维度 1.4 时钟与走时 1.5 时间需求之间的关系 二、时间子系统的硬件基础 2.1 时钟硬件类型 2.2 x86平台上的时钟 2.3 ARM平台上的时钟 三. 时间子系统的软件架构 3.1 系统时钟的设计 3.2 系统时钟的实现 3.3 动态tick与定时器 3.4 用户空间API的实现 四. 总结回顾 一、时间概念解析 我们住在空间
上一篇文章我们简单了解了一些关于时间的概念,以及Linux内核中的关于时间的基本理解。而本篇则会简单说明时钟硬件,以及Linux时间子系统相关的一些数据结构。
在上面工作方式下,Linux 2.6.16 之前,内核软件定时器采用timer wheel多级时间轮的实现机制,维护操作系统的所有定时事件。timer wheel的触发是基于系统tick周期性中断。
《.NET中有多少种定时器》一文介绍过.NET中至少有6种定时器,但精度都不是特别高,一般在15ms~55ms之间。
.NET中有多少种定时器一文介绍过.NET中至少有6种定时器,但精度都不是特别高,一般在15ms~55ms之间。在一些特殊场景,可能需要高精度的定时器,这就需要我们自己实现了。本文将讨论高精度定时器实现的思路。
可以发现sleep主要调用clock_nanosleep系统调用来进行睡眠(也就是说用户态任务睡眠需要调用系统调用陷入内核)。
Linux 内核通常会使用 定时器 来做一些延时的操作,比如常用的 sleep() 系统调用就是使用定时器来实现的。
JavaScript 是一种单线程的编程语言,这意味着它一次只能执行一个任务。为了能够处理异步操作,JavaScript 使用了一种称为事件循环(Event Loop)的机制。
JavaScript 是一种单线程的编程语言,这意味着它一次只能执行一个任务。为了能够处理异步操作,JavaScript 使用了一种称为事件循环(Event Loop)的机制。本文将深入探讨事件循环的工作原理,并展示如何基于这一原理实现一个更为准确的 setTimeout、setInterval
不知道大家还记得在学校的时候体育测试时老师带的秒表吗?当枪声想起时,我们开始跑步,这时秒表启动,当我们跑过终点后,老师会按下按扭记录我们的成绩,这就是一个典型的定时器的应用。今天我们要学习的内容其实就是和这个体育测验的秒表类似的一个功能扩展,它就是 PHP 的 HRTime 扩展。
如果你想周期性的做一些事情,那么必然,会与时间产生联系。比如,每天早晨7点吃早餐,每天晚上10点进入梦乡。当然,如果你有伴侣的话,晚上这个时间可能不会这么固定。
实时分为硬实时和软实时,硬实时要求绝对保证响应时间不超过期限,如果超过期限,会造成灾难性的后果,例如汽车在发生碰撞事故时必须快速展开安全气囊;软实时只需尽力使响应时间不超过期限,如果偶尔超过期限,不会造成灾难性的后果.
LARGE_INTEGER是union,用于表示一个64位有符号整数值,其他定义如下:
严格来说,Linux 不是实时操作系统,但 Linux 却支持实时调度算法。与通用调度算法(如完全公平调度算法)相比,实时调度算法更注重任务(进程)的实时性。为什么 Linux 支持实时调度算法,却不是实时操作系统呢?有兴趣的同学可以去网上查阅相关的文献或者资料。
其定义如下: typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER;
无论是任务处于用户态还是内核态,经常会因为等待某些事件而睡眠(可能是等待IO读写完成,也可能等待其他内核路径释放一把锁等)。本文来探讨一下,任务处于睡眠中有哪些状态?睡眠对于任务来说究竟意味着什么?内核是如何管理睡眠的任务的?我们会结合内核源代码来分析任务的睡眠,力求全方位角度来剖析。
视频合成是采用FFmpeg实现的,将h264视频和aac视频合成到mp4容器中。音频写入到mp4容器验证过是正常的,但视频写入到mp4容器中,播放出来总是过快。查看了些资料,一般说是pts的问题,也按着官方文档去做,还是不行。
上一篇文章中我们详细介绍了 python 中的信号机制。 python 进程间通信(一) — 信号的基本使用
Linux定时器分为低精度定时器和高精度定时器两种类型,内核对其均有实现。本文讨论的是我们在应用程序开发中比较常见的低精度定时器。作为常用的基础组件,定时器常用的几种实现方法包括:基于排序链表实现、基于小根堆实现、基于红黑树实现、基于时间轮实现。本文讲解的是时间复杂度最优,也是linux内核采用的基于时间轮的实现方式。
STC15F104W单片机是STC生产的单时钟/机器周期(1T)的单片机,是高速/高可靠/低功耗/超强抗干扰的新一代8051单片机,采用STC第八代加密技术,超级加密,指令代码完全兼容传统8051,但速度快8-12倍。内部集成高精度R/C时钟(+/-0.3%),+/-1%温飘(-40C~+85C),常温下温飘+/-0.6%(-20C~+65C),5MHz~35MHz宽范围可设置,可彻底省掉外部昂贵的晶振和外部复位电路(内部已集成高可靠复位电路,ISP编程时8级复位门槛电压可选)。
内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 <linux/timer.h> 和 kernel/timer.c 文件中。
既然本书中的大多数的例子都需要测量一个时间间隔,我们需要更仔细地介绍一下当前U n i x系统所采用的记录时间的方法。下面的描述适用于本书中例子所使用的系统,也适用于大多数的U n i x系统。[ L e ffler et al. 1989]的3 . 4节和3 . 5节给出了另外的细节。
一般 RTOS 系统时钟 1KHz 的情况下,thread_sleep() 的最短时间是 1ms。在实时控制中有些情况需要微秒(us)级延时,这该怎么办呢?
领慧立芯专注于高性能模拟及混合信号芯片开发设计。创始团队成员均来自知名芯片设计公司,平均设计开发经验大于十年,熟稔产品定义,设计研发,测试量产,运营销售等各个环节。公司致力于中高端数模混合产品的研发,产品主要涉及高精密信号链和信号链MCU/SOC两大方向,关键指标可对标业内领先水平,可广泛应用于通讯设备、工业控制、医疗仪器和汽车电子等领域。
时间同步技术在所有网络应用中都是至关重要的,从互联网到工业,金融和科学应用,莫不如是,因此催生了包括NTP(网络时间协议)与1588v2 PTP(精确时间协议)等用于互联设备授时协议、以及通过GNSS接收机进行时间同步的方法。如今,随着物联网技术的不断发展,授时技术正在互联网、卫星定位、高频交易和移动电信网络中发挥着中央赋能的作用,进一步拓展物联网生态系统,为大量新兴商业提供发展机会。
近年来,伴随着自动化行业加速转型,带动机加工领域高速发展,促使制造工艺不断升级。在机床加工过程中,应用桁架机械手辅助上下料,替代人工,自动进行一系列作业,已成为机床加工过程中重要的环节。实现客户的个性化需求,针对控制系统要具备灵活性、稳定性、性价比等特点,是产品升级迭代的着重点。
NY8B062F是以EPROM作为存储器的 8 位单片机,专为家电或量测等等的I/O应用设计。采用CMOS制程并同时提供客户低成本、高性能、及高性价比等显著优势。NY8B062D核心建立在RISC精简指令集架构可以很容易地做编程和控制,共有 55 条指令。除了少数指令需要两个指令时钟,大多数指令都是一个指令时钟能完成,可以让用户轻松地以过程控制完成不同的应用。因此非常适合各种中低记忆容量但又复杂的应用。 NY8B062F内建高精度十一加一通道 12位ADC模数转换器,与高精度电压比较器,足以应付各种模拟接口的侦测与量测。在 I/O 的资源方面,NY8B062D 有 14 根弹性的双向 I/O 脚,每个 I/O 脚都有单独的寄存器控制为输入或输出脚。而且每一个 I/O 脚位都能通过控制相关的寄存器达成如上拉或下拉电阻或开漏(Open-Drain)输出。此外针对红外线摇控的产品方面,NY8B062D 内置了可选择频率的红外载波****口。 NY8B062F 有四组定时器,可用系统时钟当作一般的计时应用或者从外部讯号触发来计数。另外 NY8B062D 提供 3组 10 位的 PWM 输出,3 组蜂鸣器输出,可用来驱动马达、LED、或蜂鸣器等等。
从操作系统启动到现在所经过的毫秒数,精度为1毫秒,经简单测试发现其实误差在大约在15ms左右
最近在开发一个项目,需要用到高精度的延时机制,设计需求是 1000us 周期下,误差不能超过 1%(10us)。
在android 手机上,如果call usleep(2*1000),结果sleep时间不定,甚至结果sleep了50+ms,是不是有点过分,测试代码如下:各位可以在手机上测试下,特别是把程序放在后台运行的情况下。
在JavaScript的世界里,定时器是实现异步编程不可或缺的工具,它允许我们按计划执行某些代码片段。setTimeout和setInterval作为两大核心定时器函数,广泛应用于页面动画、定时更新、延时操作等多种场景。本文将深入浅出地介绍这两个函数的基本用法、常见问题、易错点及避免策略,并通过代码示例加以说明。
我正在学习 Zephyr,一个很可能会用到很多物联网设备上的操作系统,如果你也感兴趣,可点此查看帖子zephyr学习笔记汇总。
组调度(task_group)是使用Linux cgroup(control group)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。
实时系统要求对事件的响应时间不能超过规定的期限,响应时间是指从某个事件发生到负责处理这个事件的进程处理完成的时间间隔,最大响应时间应该是确定的、可以预测的。
低分辨率定时器可以分为周期性和动态性,这里只讨论周期性。在jiffies小节中知道,linux系统会在每个时钟中断会增加jiffies的值,同时还会去处理到期的定时器。而系统时钟中断的速度取决于HZ的值,如果HZ配置为1000,则每秒会产生1000次时钟中断。如果按照样的话,是不是HZ的值越大越好,其实不然。如果HZ的值越大,则会造成系统的负载也会越大。所以HZ的值一般在每个平台是不一样的。假设HZ=250,那么系统会在每4ms会产生一个时钟中断,然后会去处理超时的定时器。但是4ms对有些设备是可以满足的,对一些要求延迟到us的设备是不满足的,所以linux设计者就推出了高精度定时器Hrtimer,所以把之前依赖HZ的值的定时器称为低分辨率定时器。
自上次分享了在英飞凌TriCore架构的MCU上移植FreeRTOS后,后台有不少人咨询关于系统时基的事情,今天就来介绍下这个STM。
地图类、打车、外卖等类型的手机APP,一进入便咨询是否允许获取我们的位置,允许之后会根据我们所在位置推荐好物,逐渐地 H5 网页也开始获取用户位置。Geolocation是 H5 新增的对象,用于定位。常见打开网页有两种方式:移动端和PC端。它们是根据什么如何定位的呢?
在我们的DIY电子时钟里,需要用到单片机定时器来做秒的显示,说是显示,其实就是实现数码管上“:”点的闪烁。这里初步定义为每秒亮1次,亮0.5秒,灭0.5秒。实现显示秒的功能。这里也可以用DS1302的秒数据来做,但是实现起来麻烦,达到一样的效果,我们追求的是程序越简单越好,所以在此我们用单片机定时器来实现。
SYN4631型PCIe转串口授时卡是西安同步电子科技有限公司研发生产的一款通过PCIe总线转换为串口为计算机、工控机等操作系统提供高精度授时的时钟卡。该授时卡采用流水线自动化贴片生产,使用FPGA+ARM框架设计,接收GPS/北斗/PTP/交直流IRIG-B码/CDMA/1PPS/10MHz等外部参考信号,输出各种时间频率信号,提高系统的时间精度和准确度,满足不同用户需求。
时间与每个人息息相关,当我们熟悉的时间被压缩到10-10量级(亚纳秒级),意味着什么?“新一代同步时间信息网络”究竟是什么?为什么说未来物联网、5G、人工智能等新兴领域的实现离不开精准时间技术?
【玩转 GPU】AI绘画、AI文本、AI翻译、GPU点亮AI想象空间-腾讯云开发者社区-腾讯云 (tencent.com)
随着内核不断更新演进,内核对定时器的分辨率要求越来越高。硬件的高速发展也逐渐能够满足内核的这一要求,因此内核针对硬件提供的便利,开始设计了更高分辨率的定时器(hrtimer),可达到ns级别。本文主要讲解如何使用高精度定时器。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158894.html原文链接:https://javaforall.cn
Linux应用编程涉及到在Linux环境下开发和运行应用程序的一系列概念。以下是一些涵盖Linux应用编程的基本概念:
.NET中至少有6种定时器,每一种定时器都有它的用途和特点。根据定时器的应用场景,可以分为UI相关的定时器和UI无关的定时器。本文将简单介绍这6种定时器的基本用法和特点。
领取专属 10元无门槛券
手把手带您无忧上云