嵌入式操作系统分析(六):嵌入式时钟机制

嵌入式时钟机制 

概述:

    对于实时嵌入式系统来说,时间是一个决定性因素,所有任务的运行原则上都需要能够预见性,即任务的运行时间是确定性的,可以事先知道的。另一原因是:嵌入式系统的时钟中断是系统的源动力,推动任务的执行与任务调度。在实时系统,控制系统与计算机中,它可以提供定时信号,以实现定时或延时控制,如定时中断,动态存储器的定时刷新等;它还可以实现计数功能,通过对外部事件的计数,实现相应的控制或处理。

在嵌入式系统中主要有两种时钟:RTC时钟和操作系统时钟。

RTC时钟:

 RTC就是采用独立的晶振(或集成),拥有独立供电系统,永不间断的运行,从而给系统提供可靠的系统时间。
这样,RTC为整个计算机提供了一个计时标准,而且为系统提供了一个高精度时钟的解决方案,对于大部分需要高精度时钟的场所,几乎都由RTC时钟来提供的。高精度时钟又是嵌入式系统的一个基本需求。RTC时钟也被称为硬件时钟、其具体的实现方式与硬件平台有密切关系。

在X86中:

在最早的IBM兼容微机中,并没有断电后仍能够保持系统时间的时钟装置。后来,IBM兼容微机的主板上引入摩托罗拉的MC146818 RTC芯片,该芯片时钟的作用就是在系统断电后依靠后备电池来保持系统时间的连续性。
    MC146818 RTC有64个寄存器,地址编号为0x00~0x3F,可以分为三组:
    (1)时钟与日历寄存器组:共有10个(0x00~0x09),表示时间、日历的具体信息。在PC机中,这些寄存器中的值都是以BCD格式来存储的(比如23dec=0x23BCD)。
    (2)状态和控制寄存器组:共有4个(0x0A~0x0D),控制RTC芯片的工作方式,并表示当前的状态。
    (3)CMOS配置数据:通用的CMOS RAM。
    RTC寄存器占据的是CMOS中0x00~0x0D地址空间,可以通过端口70H和71H读/写时间和日期。端口0x70被用作RTC芯片内部寄存器的地址索引端口,而端口0x71则被用作RTC芯片内部寄存器的数据端口。在读写一个RTC寄存器之前,首先应该把该寄存器在RTC芯片内部的地址索引值写到端口0x70中。

在ARM中:

 

操作系统时钟:

系统时钟与RTC不同,它是硬件(定时/计数器)和软件(时钟中断处理程序)的结合。在开机时,操作系统通过获取RTC中的时间数据来初始化系统时钟,然后通过定时/计数芯片的向下计数引发时钟中断,形成系统时钟。

通常,操作系统可以使用三种方法来表示系统的当前时间与日期:①最简单的一种方法就是直接用一个64位的计数器来对时钟滴答进行计数。②第二种方法就是用一个32位计数器来对秒进行计数,同时还用一个32位的辅助计数器对时钟滴答计数,之子累积到一秒为止。因为2的32次方超过136年,因此这种方法直至22世纪都可以让系统工作得很好。③第三种方法也是按时钟滴答进行计数,但是是相对于系统启动以来的滴答次数,而不是相对于相对于某个确定的外部时刻;当读外部后备时钟(如RTC)或用户输入实际时间时,根据当前的滴答次数计算系统当前时间。

时钟机制的具体实现:

Linux时钟机制:


UCOS时钟机制:

结论:

参考文献:

 1、 RTC 实时时钟驱动。  侯辉华

 

你可能感兴趣的:(嵌入式操作系统分析(六):嵌入式时钟机制)