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

Android环境下高精度计时方案 android手机中有一个时钟计数寄存器,正常情况下,用户态程序是无法访问的,为了能够访问这个寄存器,要写一个内核模块,加载到系统中。手机必须先root。首先是内核模块的编译(开发环境为Ubuntu kylin 14.0.4):具体过程参考http://blog.csdn.net/fdl19881/article/details/7467129几点修正的地方:1. 国内android.google... 阅读详情

作者   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 = {
.name = "osmr0",
.features = CLOCK_EVT_FEAT_ONESHOT,
Android高精度定时器教程 通过使用上述方法之一,您可以在Android应用程序中实现高精度的定时器。根据您的需求和性能要求,选择适合的方法,并根据您的需求调整定时器的间隔。记住,在编写定时器逻辑时,始终考虑到设备的性能和电池寿命,避免使用过于频繁的定时器触发。方法中,您可以编写您的任务逻辑。在示例中,我们将任务的执行间隔设置为10毫秒,并在任务完成后重新调度任务以实现周期性执行。但请注意,由于Android系统的限制和设备性能的差异,实际精度可能会有所不同。在本教程中,我将向您展示如何创建一个高精度的定时器来满足您的需求。 阅读详情

相关推荐

[RK3568 Android11] 教程之高精度定时器(hrtimer)

目录 前言 一、什么是高精度定时器 二、高精度定时器知识点 三、高精度定时器的使用 四、扩展知识 前言 高精度定时器,为我们提供了纳秒级别的定时精度,以满足对精确时间有迫切需求的内核驱动。hrtimer通过可编程定时器来现,在等待时,不占用CPU资源; 一、什么是高精度定时器 内核从2.6.xx开始加入了高精度定时器hrtimer,它可以为我们提供纳秒级别的定时精度,以满足对精确时间有迫切需求的内核驱动;高精度定时器它类似于一种“软件中断”,定时时间超时会触...

~未来可期~ 1475

高精度定时器测试程序(微秒定时)

自己编的一个用于高精度定时的一段程序,此程序定时为微秒级别的

Ansys疲劳仿真:工程结构寿命评估的实战方法论

做了这么多年仿真,有个感受越来越深——静力学算得再漂亮,疲劳寿命预测不对,项目照样过不了评审。不是因为理论有多复杂,而是因为疲劳损伤的物理机制本身就带有统计属性,材料内部的微观缺陷分布、应力集中位置、载荷谱的随机性,每一项都能让结果偏移20%甚至更多。本文从实战出发,梳理Ansys疲劳仿真的核心流程,重点讲清楚载荷类型选择、S-N曲线处理、应力集中修正这几个最容易出问题的环节。疲劳仿真做好了,最大的收获不是跑出一个漂亮的Damage云图,而是对结构的真实薄弱环节建立起量化的认知。

keyanxiaobaigou的博客 529

Python地理空间库安装指南:从gdal到geopandas的完整流程

本文详细介绍了Python地理空间库的完整安装流程,包括gdal、rasterio和geopandas等核心库的安装与配置。通过Anaconda环境管理和conda-forge频道,帮助开发者高效解决依赖问题,确保地理空间数据处理环境的稳定运行。

weixin_29091105的博客 466

手把手教你学Simulink——电机电磁兼容与可靠性场景示例:基于Simulink的电机噪声抑制控制仿真

本文带你完成了电机噪声抑制控制的Simulink仿真,实现了:✅ 揭示了电磁噪声从电流到声音的传递机理✅ 搭建了含死区、固定载波等噪声源的高保真模型随机PWM(消除啸叫)谐振控制器(抑制5/7次嗡鸣)谐波注入(降低THD) ✅ 通过综合方案将噪声降低10 dB以上(感知响度减半!) ✅ 为产品静音品质提升提供可落地的控制方案。

MHD0815的博客 94

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6106

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

Qt —— 百度离线地图 - 加载百度离线地图、及地图上绘图(附:源码)

Qt —— 加载百度离线地图、及简单绘图(附源码)

1063

【人工智能】Gemini怎么使用智能体的能力? Gemini Gems: 定制你的AI智能体

Gems 是 Gemini 的定制版本。你可以通过设定特定的指令(Instructions),让它变成你需要的专家。一旦创建,它会记住这些设定,你不需要在每次对话时重复输入背景信息。目前创建和使用自定义 Gems 通常需要订阅(Google One AI Premium 计划)。对于大多数用户来说,Gemini Advanced 中的 Gems是使用智能体能力的最直接方式。它能让你把重复性的提示词封装成一个好用的工具。

奶爸的编程之路,也就一周冷个三天 783

基于FFmpeg的视频播放器之十二:seek

seek是播放器的常用操作,也是衡量播放器好坏的重要标志之一。 一.效果 下面是对正在播放的4K视频执行seek操作

草上爬的博客 5406

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: linux的板级支持以I.mx5为例 笔记版 转载请注明出处---crosskernel@gmail.com
下一篇: 卷一 内核源代码分析 第一章 linux内核对cortex A9多核处理器的支持 1.1 CPU的基本管理 图书试读版-请勿转载
crosskernel
博客等级 码龄18年 14粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值