android手机高精度定时机制--higher timer tick 笔记版 转载请注明出处--- crosskernel@gmail.com

本文探讨了Android系统中高精度定时的原理,从硬件时钟到内核定时机制,包括hrtimer的使用,强调了调度对定时精度的影响。同时提到了在系统休眠时RTC(实时时钟)的角色,它是保持计时并唤醒处理器的关键。
摘要由CSDN通过智能技术生成

作者   crosskernel@gmail.com


没想到这篇随意记录的笔记成为老夫博客里阅读量最多的。看来这的确是兄弟们关注较多的地方,待老夫抽时间把这个部分重新整理下,写一个从内核到应用API的更新吧。

这里简单说一下android系统定时的原理。


首先,万佛归宗,在ARM SOC硬件体系中,通常会提供几个硬件计数器,输入为PLL过来的脉冲,计数到一定数量产生中断。这就是硬件时钟,可见其精度可以达到PLL的脉冲周期。

但是这个时钟只能被内核感知,而且由于内核有时会关闭中断,所以这个时钟中断有时不能被及时收到,产生偏移。但这不要紧,这只是脉冲周期级别的偏移,精度依然可以接受。

再扯远一点,以前内核的定时机制是以tick为单位,而tick通常是1ms到数十ms产生一次,这依据具体的硬件系统而变。这样其精度就只能以tick为单位,所以早期的内核里tick就以为可控制的时间精度。

再往后人们希望更精确的定时,于是希望依据硬件时钟精度来控制定时,于是就有了一个内核patch,在tick之间插入时候时钟,再往后随着linux架构的不断完善,出现的hrtimer,这是不管三七二十一,以硬件时钟作为定时的依据,而ticker只是其中的一种情况。

但是,hrtimer并不意味着依据此定时的应用就能真正的或者其精度(抛去中断不能及时接受而产生的偏移)。这是因为作为一个分时系统(基于linux内核的android系统完全遵循其规律),即使到了触发时刻如果对应的线程不能被及时调度,时钟到来没有意义。所以调度是另外一个最大的影响。

上面说的定时是基于硬件时钟的定时机制,其前提是系统正常工作,其特点是精度高,但是系统休眠时这个机制就没法工作。这时就是另外一个时钟RTC的任务了。

所谓RTC即实时时钟,在 ARM SOC硬件体系中有一块区域非常特殊,由单独的电路供电,而且有一个单独的晶振为其提供脉冲,及时休眠也不例外,这就是RTC时钟。

RTC不停地对晶振脉冲计数,用来长时间的定时,它有着唤醒处理器的作用,在Andorid系统中使用的定时通常是基于RTC工作的。


/****************************************原笔记*****************************************************/



android手机内核时钟整体架构分为上下两层,下层理解为物理时钟的操控,即按照上层时钟逻辑的要求产生物理时钟中断、编程产生下一次时钟中断、切换时钟中断产生的模式、初始、关闭物理时钟。而上层时钟的作用是根据内核运行时的要求对下层下发各种命令,并根据下层送上来的时钟事件驱动内核的high resolution timer,schedule tick,tickless sleep等机制的运行。


1 初始化

Linux内核用struct clock_event_device;来管理时钟设备。
举例来看:对于PXA系列SOC上,用于内核时钟的定时器,就用了一个如下的结构来管理:


static struct clock_event_device ckevt_pxa_osmr0 = {
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值