Linux下应用开发可利用的计时器技术1:RTC实时时钟---./linux-2.6.32.1/Documentation/rtc.txt

RTC:实时时钟(Real Timer Clock)是一个硬件计时器,它独立于整个操作系统(如CPU或其它芯片),内核利用其获取系统当前时间和日期。

----------------------------------

Linux开发者谈论一个“实时时钟”时,他们通常意指跟踪挂钟时钟,它被电池驱动因此在系统下电后仍然能工作。这种时钟通常不会跟踪本地时间或者夏令时时间--除非他们用MS-Windows双重引导而是设置成格林威治时间。

最新的非PC硬件趋向于仅仅计算秒,如time(2)系统调用那样的报告格式,但是RTCs通常用格里历和24小时方式来表示时间,如gmtime(3)那样的报告格式。

Linux有两个很大程度相兼容的用户空间RTC API族,你可能需要了解关于:

Ø         /dev/rtc…是一个被PC兼容系统提供的RTC,因此它不能移植到非x86系统中。

Ø         /dev/rtc0,/dev/rtc1…是一个框架的一部分,在所有系统上它被大部分RTC芯片支持。

程序员需要了解到PC/AT功能不总是可用的,在一些系统上更加突出。更确切的说,RTCs使用相同的API请求两个RTC框架(当然是使用不同的文件名),但是硬件可能不会提供相同的功能。例如,并不是每个RTC连接着一个中断请求,因此他们不能所有都发出警报;

 

老的PC/AT兼容驱动:/dev/rtc

--------------------------------------------

所有的PC都有一个内置的实时时钟,通常他们都是内置于计算机芯片组中,不过部分PCz的主板上有一个摩托罗拉MC146818。实时时钟是你的计算机短电时用来保持数据和时间的时钟。

不仅如此,它也能被用来产生频率2HZ~8192HZ的信号。这些信号通过中断量8来报告。因此实时时钟通过报警结束时发出的中断量8,就能充当一个24小时的报警器,报警器能被编程用于核对任意三个可编码值的子集。例如,可用于设置在每小时的第30分钟第30秒产生鸣响。实时时钟也能设置成每个时间更新时产生一个中断,这产生一个1HZ的信号的方式实现。

中断通过/dev/rtc以无符号整型的形式来报告。低字节包含产生的中断类型(update-done, alarm-rang, or periodic)。剩余的字节包含从最近一次读取以来的中断数量。状态信息通过虚文件/porc/driver/rtc来报告,如果/proc文件系统可用的话。驱动构建成锁闭,因此每一次只有一个进程被允许获取/dev/rtc并打开。

用户进程可监视这些中断,通过read(2)select() /dev/rtc—两者都将阻塞用户进程直到下一个中断到达。这对某些情景非常有用,比如适量高频率的数据采集,而不想使用gettimeofday使用CPU达到100%等等。

在高频率或高负载下,用户进程应该核对从最近一次读取以来的中断数量,以便测定是否有所谓的中断积累(interrupt “pileup”)。仅作为参考,一个典型的486-33计算机执行一个紧凑的读/dev/rtc循环,将偶尔遭遇中断积累(interrupt “pileup”),对于频率超过1024HZ的来说。因此,你应该核对读到的中断值的高字节,特别是频率在普通时钟中断以上的情况,普通时钟中断频率是100HZ

编程和/或使中断频率大于64HZ的只有被root用户允许,这可能有些保守,但我们不希望一个不怀好意的用户在慢的386sx-16机器上产生大量的中断请求。这可能在性能上导致不可预知的影响。注意,中断处理程序仅仅是很少行的代码,以便使可能受到的影响降到最低。

如果内核时间与外部信源同步,那内核将每11分钟把时间写入到CMOS时钟去。在做这个过程中,内核会短暂关闭RTC周期性中断,因此如果正在做一个严谨的工作,你必须知道这点。如果内核时间不需与外部信源同步,那么内核将保持不持有RTC,并允许你的应用程序独享对RTC设备的访问。

告警和/或中断频率被编码进入RTC,这是通过在./include/linux/rtc.h所列的ioctl(2)调用来实现的。可能用一个小的测试程序来演示如何使用它们更有用,而不是写50页来描述ioctl()等等,并且演示驱动的特性。这可能对使用该驱动写应用程序感兴趣的人来说更有用。

 

示例代码:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值