一种获取系统时间的方法和装置转让专利

申请号 : CN201010175864.9

文献号 : CN102243506B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 毛桂全杨利明万娜施学美

申请人 : 杭州华三通信技术有限公司

摘要 :

本发明提供了一种获取系统时间的方法,应用于系统的不掉电重新启动过程,该方法包括:保存重新启动系统时的时间T1;记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3,所述第一时钟计数值是记录在中央处理单元CPU时钟寄存器中的值;将所述T1与所述T3进行求和,得到系统时间。本发明同时公开了一种获取系统时间的装置和高精度实时时钟RTC,应用本发明所述的方法、装置和RTC,在对系统进行重新启动时,在误差允许的范围内,不仅能够获取到准确的系统时间,而且实现简单、使用方便。

权利要求 :

1.一种获取系统时间的方法,应用于系统的不掉电重新启动过程,其特征在于,该方法包括:保存重新启动系统时的时间T1;

记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3,所述第一时钟计数值是记录在中央处理单元CPU时钟寄存器中的值;

将所述T1与所述T3进行求和,得到系统时间;

其中,所述根据所述第一时钟计数值与系统时钟频率,得到T3包括:

获取所述记录的第一时钟计数值,将所述第一时钟计数值与所述系统时钟频率进行相乘,得到T3。

2.根据权利要求1所述的方法,其特征在于,当在子系统中进行重新启动时,所述记录第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到T3包括:记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值,根据所述第二时钟计数值与系统时钟频率,得到重新启动子系统时与重新启动子系统完成时之间的时间差T2,保存所述T2,所述第二时钟计数值是记录在CPU时钟寄存器中的值;

记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值,根据所述第三时钟计数值与系统时钟频率,得到重新启动子系统完成时与重新启动系统完成时之间的时间差T3’,所述第三时钟计数值是记录在CPU时钟寄存器中的值;

将所述T2与所述T3’进行求和,得到T3。

3.根据权利要求2所述的方法,其特征在于,所述根据所述第二时钟计数值与系统时钟频率,得到T2包括:获取所述记录的第二时钟计数值,将所述第二时钟计数值与所述系统时钟频率进行相乘,得到T2;

所述根据所述第三时钟计数值与系统时钟频率,得到T3’包括:

获取所述记录的第三时钟计数值,将所述第三时钟计数值与所述系统时钟频率进行相乘,得到T3’。

4.根据权利要求2所述的方法,其特征在于,当在子系统中进行重新启动的次数为n时,所述记录第二时钟计数值,根据所述第二时钟计数值与系统时钟频率,得到T2包括:依次记录每次重新启动子系统时与该次重新启动子系统完成时之间的子时钟计数值,根据所述子时钟计数值与系统时钟频率,得到每次重新启动子系统时与该次重新启动子系统完成时之间的时间差;

将n次时间差进行求和,得到第一次重新启动子系统时与第n次重新启动子系统完成时之间的时间差T2,其中,所述n为大于1的整数。

5.根据权利要求1-4中任一权利要求所述的方法,其特征在于,该方法还包括:在系统正常运行期间,接收到重新设置系统时间的命令后,对所述系统时间重新进行设置,得到希望的系统时间。

6.一种获取系统时间的装置,应用于系统的不掉电重新启动过程,其特征在于,该装置包括:时间存储模块、第一时间差运算模块和系统时间运算模块,其中,所述时间存储模块,用于保存重新启动系统时的时间T1;

所述第一时间差运算模块,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3;

所述系统时间运算模块,用于将所述时间存储模块中的T1与所述第一时间差运算模块中的T3进行求和,得到系统时间;

其中,所述第一时间差运算模块包括第一时钟计数子模块、第一时钟获取子模块和第一时钟运算子模块,其中,所述第一时钟计数子模块,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值;

所述第一时钟获取子模块,用于获取所述第一时钟计数子模块中记录的第一时钟计数值;

所述第一时钟运算子模块,用于将所述第一时钟计数值与所述系统时钟频率进行相乘,得到T3。

7.根据权利要求6所述的装置,其特征在于,当在子系统中进行重新启动时,所述第一时间差运算模块包括第二时间差运算模块、第三时间差运算模块和第一时间差求和模块,其中,所述第二时间差运算模块,用于记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值,根据所述第二时钟计数值与系统时钟频率,得到重新启动子系统时与重新启动子系统完成时之间的时间差T2;

所述时间存储模块,进一步用于保存所述第二时间差运算模块中的T2;

所述第三时间差运算模块,用于记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值,根据所述第三时钟计数值与系统时钟频率,得到重新启动子系统完成时与重新启动系统完成时之间的时间差T3’;

所述第一时间差求和模块,用于将所述T2与所述T3’进行求和,得到T3。

8.根据权利要求7所述的装置,其特征在于,

所述第二时间差运算模块包括:第二时钟计数子模块、第二时钟获取子模块和第二时钟运算子模块,其中,所述第二时钟计数子模块,用于记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值;

所述第二时钟获取子模块,用于获取所述第二时钟计数子模块记录的第二时钟计数值;

所述第二时钟运算子模块,用于将所述第二时钟计数值与所述系统时钟频率进行相乘,得到T2;

所述第三时间差运算模块包括:第三时钟计数子模块、第三时钟获取子模块和第三时钟运算子模块,其中,所述第三时钟计数子模块,用于记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值;

所述第三时钟获取子模块,用于获取所述第三时钟计数子模块记录的第三时钟计数值;

所述第三时钟运算子模块,用于将所述第三时钟计数值与所述系统时钟频率进行相乘,得到T3’。

9.根据权利要求7所述的装置,其特征在于,所述第二时间差运算模块,还用于在子系统中进行重新启动的次数为n时,依次记录每次重新启动子系统时与该次重新启动子系统完成时之间的子时钟计数值,根据所述子时钟计数值与系统时钟频率,得到每次重新启动子系统时与该次重新启动子系统完成时之间的时间差,将n次时间差进行求和,得到第一次重新启动子系统时与第n次重新启动子系统完成时之间的时间差T2后保存,其中,所述n为大于1的整数。

10.根据权利要求6-9中任一权利要求所述的装置,其特征在于,该装置还包括系统时间设置模块,用于在系统正常运行期间,接收到重新设置系统时间的命令后,对所述系统时间重新进行设置,得到希望的系统时间。

11.一种高精度实时时钟RTC,其特征在于,该RTC包括:时间存储模块和第一时钟计数子模块,其中,所述时间存储模块,用于保存重新启动系统时的时间T1,供得到系统时间;

所述第一时钟计数子模块,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,供得到重新启动系统时与重新启动系统完成时之间的时间差T3,其中,所述第一时钟计数子模块,具体用于将所述第一时钟计数值与所述系统时钟频率进行相乘,得到T3。

12.根据权利要求11所述的RTC,其特征在于,当在子系统中进行重新启动时,所述第一时钟计数子模块又包括:第二时钟计数子模块、第三时钟计数子模块,其中,所述第二时钟计数子模块,用于记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值,供得到重新启动子系统时与重新启动子系统完成时之间的时间差T2;

所述第三时钟计数子模块,用于记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值,供得到重新启动子系统完成时与重新启动系统完成时之间的时间差T3’;

所述时间存储模块,进一步用于保存所述第二时钟计数值与系统时钟频率进行相乘得到的T2,供得到重新启动系统时与重新启动系统完成时之间的时间差T3。

13.根据权利要求12所述的RTC,其特征在于,所述第二时钟计数子模块,还用于在子系统中进行重新启动的次数为n时,依次记录每次重新启动子系统时与该次重新启动子系统完成时之间的第二时钟计数值,供得到第一次重新启动子系统时与第n次重新启动子系统完成时之间的时间差T2;

所述时间存储模块,还用于保存n次所述第二时钟计数值与系统时钟频率进行相乘并求和后得到的T2,供得到重新启动系统时与重新启动系统完成时之间的时间差T3。

说明书 :

一种获取系统时间的方法和装置

技术领域

[0001] 本发明涉及系统时钟设计技术领域,特别涉及一种获取系统时间的方法和装置。

背景技术

[0002] 在对系统进行重新启动时,系统时间会恢复到系统软件中的时间模块所设置的默认时间,然而,由于时间是动态变化的,保存在系统软件的时间模块中的默认时间并不能作为系统重新启动后的真实的系统时间,因而需要时间模块重新获取一个初始时间作为系统重新启动后的系统时间,为了描述方便,后续将重新启动系统后获取到的系统时间也称为系统初始时间。图1为现有重新启动系统时获取系统时间方案的示意图,从图1中可以看出,现有获取系统时间主要分为两个过程,即系统初始时间获取过程和系统时间设置过程,且这两个过程都是通过系统软件中的时间模块、驱动软件以及高精度实时时钟(RTC)共同完成的。图2给出了图1所述方案下获取系统时间的工作流程,如图2所示,该流程包括以下步骤:
[0003] 步骤201-202:当重新启动系统时,系统软件中的时间模块向驱动软件发送获取系统初始时间的请求,请求获取重新启动系统后的系统初始时间;进而由驱动软件将所述接收到的获取系统初始时间的请求转发给RTC。
[0004] 步骤203:RTC根据接收到的请求,生成对应的系统初始时间。
[0005] 需要说明的是,RTC具有自动生成系统初始时间的功能,且生成的系统初始时间为当前准确的系统时间,其具体工作原理为现有技术,不再赘述。
[0006] 步骤204-205:RTC将所述生成的系统初始时间反馈给驱动软件,并由驱动软件将所述系统初始时间反馈给时间模块。
[0007] 至此,即完成了图1中所述的系统初始时间获取过程,且这里获取到的系统初始时间为系统重新启动后的准确的系统时间,此后,系统便将该系统初始时间作为系统时间。
[0008] 在系统运行期间,当需要重新设置系统时间时,则需执行步骤206-209,其处理过程如下:
[0009] 步骤206:在时间模块接收到重新设置系统时间的命令后,对系统时间重新进行设置。
[0010] 步骤207-208:时间模块将重新设置好的系统时间发送给驱动模块,并由驱动模块将所述系统时间发送给RTC。
[0011] 步骤209:RTC同步所述重新设置好的系统时间。
[0012] 在本步骤中,RTC同步重新设置好的系统时间是为了后续在重新启动系统时,时间模块能够从RTC中获取到准确的系统初始时间。
[0013] 至此,即完成了图1中所述的系统时间设置过程,该重新设置好的系统时间被作为新的系统时间,此后不管系统处于何种状态都以该系统时间为依据。
[0014] 需要说明的是,步骤201-205中的系统初始时间获取过程是在重新启动系统时进行的,步骤206-209中的系统时间设置过程是在系统正常运行期间进行的,即步骤206-209可以在重新启动系统步骤201-205之后,也可在重新启动系统步骤201-205之前进行,它们之间是不会产生影响的两个独立的过程。
[0015] 至此,即完成了现有重新启动系统时获取系统时间的整个工作流程。
[0016] 从上述分析可以看出,现有在重新启动系统时是通过系统软件中的时间模块向驱动软件发送获取系统初始时间的请求,进而由驱动软件将所述请求发送给RTC,RTC根据所述请求生成对应的系统初始时间后,通过驱动软件将所述系统初始时间反馈给时间模块,并以此作为当前系统时间,从而保证了在对系统进行重新启动时系统时间的准确性。
[0017] 然而,现有很多设备中并没有RTC,在重新启动系统时,也就不能实现通过RTC来保证获取到准确的系统时间。在这种情况下,每次对系统进行重新启动时,都需要重新设置系统时间,当系统比较复杂时,会增加系统的工作负担;如果不对系统时间进行重新设置,也就不能保证系统时间的准确性,从而会降低系统时间的准确度,给其它工作带来不便。

发明内容

[0018] 本发明提供了一种获取系统时间的方法,不仅能够在对系统进行重新启动时获取到准确的系统时间,而且实现简单、使用方便。
[0019] 本发明还提供了一种获取系统时间的装置,不仅能够在对系统进行重新启动时获取到准确的系统时间,而且实现简单、使用方便。
[0020] 本发明同时提供了一种高精度实时时钟RTC,不仅能够在对系统进行重新启动时获取到准确的系统时间,而且实现简单、使用方便。
[0021] 为了达到上述目的,本发明提出的技术方案为:
[0022] 一种获取系统时间的方法,应用于系统的不掉电重新启动系统过程,该方法包括:
[0023] 保存重新启动系统时的时间T1;
[0024] 记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3,所述第一时钟计数值是记录在中央处理单元CPU时钟寄存器中的值;
[0025] 将所述T1与所述T3进行求和,得到系统时间。
[0026] 一种获取系统时间的装置,应用于系统的不掉电重新启动过程,该装置包括:时间存储模块、第一时间差运算模块和系统时间运算模块,其中,
[0027] 所述时间存储模块,用于保存重新启动系统时的时间T1;
[0028] 所述第一时间差运算模块,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3;
[0029] 所述系统时间运算模块,用于将所述时间存储模块中的T1与所述第一时间差运算模块中的T3进行求和,得到系统时间。
[0030] 一种高精度实时时钟RTC,该RTC包括:时间存储模块和第一时钟计数子模块,其中,
[0031] 所述时间存储模块,用于保存重新启动系统时的时间T1,以得到系统时间;
[0032] 所述第一时钟计数子模块,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,以得到重新启动系统时与重新启动系统完成时之间的时间差T3。
[0033] 综上所述,本发明所采用的获取系统时间的方法,首先,在重新启动系统时,保存重新启动系统时的时间;其次,记录重新启动时与重新启动完成时之间的时钟计数值,由所述记录的时钟计数值得到重新启动时与重新启动完成时之间的时间差;最后,由所述保存的时间与时间差进行求和,即可得到系统时间。由此,在对系统进行重新启动时,在误差允许的范围内,不仅能够获取到准确的系统时间,而且实现简单、使用方便。

附图说明

[0034] 图1为现有重新启动系统时获取系统时间方案的示意图;
[0035] 图2为现有所采用的获取系统时间方法的工作流程图;
[0036] 图3为本发明重新启动系统时获取系统时间方案的示意图;
[0037] 图4为本发明重新启动系统时获取系统时间方法的工作流程图;
[0038] 图5为本发明实施例一获取系统时间装置的组成结构示意图;
[0039] 图6为本发明实施例一所采用的RTC的组成结构示意图;
[0040] 图7为本发明实施例二获取系统时间装置的组成结构示意图;
[0041] 图8为本发明实施例二所采用的RTC的组成结构示意图。

具体实施方式

[0042] 为了解决现有技术中存在的问题,本发明提出了一种全新的获取系统时间的方法,即:首先,在重新启动系统时,保存重新启动系统时的时间;其次,记录重新启动时与重新启动完成时之间的时钟计数值,由所述记录的时钟计数值得到重新启动时与重新启动完成时之间的时间差;最后,由所述保存的时间与时间差进行求和,即可得到系统时间。由此,在对系统进行重新启动时,在误差允许的范围内,不仅能够获取到准确的系统时间,而且实现简单、使用方便。
[0043] 基于上述介绍,本发明所述方案的具体实现包括:
[0044] 保存重新启动系统时的时间T1;
[0045] 记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3,所述第一时钟计数值是记录在中央处理单元(CPU)CPU时钟寄存器中的值;
[0046] 将所述T1与所述T3进行求和,得到系统时间。
[0047] 在介绍本发明所述方案之前,需要说明的是,本发明是通过由系统中的内存和CPU时钟寄存器来模拟RTC,其中,内存用于保存时间,CPU时钟寄存器用于记录时钟计数值。这里的内存一般为高端内存,即从内存中划分出来的一小块专用区域,由于高端内存一般不会被系统所使用,只要不掉电,高端内存中的内容就不会丢失,也不会被其他软件所修改,从而保证了在不掉电重新启动系统时,能够准确地获取到系统时间,换言之,本发明所述获取系统时间的方法仅仅应用于系统在不掉电重新启动时。
[0048] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
[0049] 图3为本发明所采用的重新启动系统时获取系统时间的方案,如图3所示,本发明获取系统时间的方案可由四个过程构成,分别为:重启时间T1记录过程、子系统初始时间T2获取过程、系统初始时间获取过程和系统时间设置过程。需要说明的是,在重新启动系统时,是由子系统进行引导而启动的,上述子系统初始时间T2获取过程是在重新启动系统时进入子系统重新启动过程所需要的过程,当没有进行子系统重新启动时,是不需要该过程的。还需说明的是,在本实施例中,在第一次进行重新启动系统时,T1可能不是用户希望的时间,由此,获取到的系统初始时间也就不是用户希望的系统时间,为此,还需系统时间设置过程实现对系统时间的设置,得到准确的系统时间,且此处对系统时间进行设置其实就是对系统时间进行修改,而具体修改方式并不是本发明核心,由本领域技术人员可以通过现有方式对获得的系统时间进行修改,故此处不对其进行赘述。
[0050] 其中,重启时间即重新启动系统时的时间T1,该时间由内存进行保存,以便用于得到系统时间;当系统重新启动时,CPU时钟寄存器被清零,此时,需要进入子系统,由子系统引导系统进行重新启动,当没有进入子系统重启过程时,则直接获取CPU时钟寄存器中的值,得到重新启动系统时与重新启动系统完成时之间的时间差T3;最后,将T1与得到的时间差T3进行求和,即可得到系统初始时间,也即系统时间。
[0051] 当需要进行子系统重新启动时,还需要子系统初始时间T2获取过程,这里的T2为子系统重新启动时与子系统重新启动完成时之间的时间差,在系统重新启动时,可能会多次进行子系统重新启动,此时,需要将多个子系统重新启动时与子系统重新启动完成时之间的时间差进行求和,得到的T2则为第一次子系统重新启动时与最后一次子系统重新启动完成时之间的时间差,之后,将所述得到的T2保存到内存中,以便用于得到系统时间;在子系统重启完成后,CPU时钟寄存器再次被清零,此时,还需要获取子系统重新启动完成时与系统重新启动完成时之间的时间差T3’;进而将T2与T3’进行求和,得到重新启动系统时与重新启动系统完成时之间的时间差T3。
[0052] 在系统正常运行期间,当需要重新设置系统时间时,可由时间模块自身对系统时间进行设置。
[0053] 在图3所述方案下,获取系统时间的工作流程参见图4,如图4所示,该流程包括:
[0054] 步骤401:在重新启动系统时,驱动软件向系统软件中的时间模块发送获取当前时间的请求,请求得到系统在重新启动时的时间T1。
[0055] 步骤402-403:在接收到获取请求后,时间模块将本身所保存的时间T1返回给驱动软件,并由驱动软件将所述时间发送到内存中。
[0056] 步骤404:内存对所述接收到的时间T1进行保存。
[0057] 至此,即完成了图3中所述的重启时间(T1)记录过程。
[0058] 在记录完T1后,还需要进入子系统,由子系统引导系统进行重新启动,当在子系统中进行重新启动时,还需要执行步骤405-409,具体流程如下:
[0059] 步骤405-406:在子系统重新启动后,驱动软件(子系统)请求获取CPU时钟寄存器中的第二时钟计数值,CPU时钟寄存器在接收到请求后,将自身保存的第二时钟计数值返回给驱动软件(子系统)。
[0060] 需要说明的是,在本步骤中,当在子系统中进行重启,在子系统重新启动时,CPU时钟寄存器被清零,因此,读取子系统重新启动完成时CPU时钟寄存器中记录的第二时钟计数值,根据所述记录的第二时钟计数值与系统时钟频率进行相乘,即可得到T1与子系统重新启动完成时这一时间的时间差T2。
[0061] 步骤407:驱动软件(子系统)将读取到的第二时钟计数值和系统的时钟频率进行相乘,计算出T2,即为T1与子系统重新启动完成时之间的时间差。
[0062] 步骤408-409:驱动软件(子系统)将计算出的T2发送到内存中,由内存对T2进行保存。
[0063] 至此,即完成了本发明子系统初始时间(T2)获取过程。
[0064] 需要说明的是,在本实施例的系统重新启动过程中,可能会进行多次子系统重新启动过程,当进行子系统重新启动的次数为n时,也就会出现重复n次执行步骤408-409的过程,此时,还需将这n次得到的时间差进行求和得到第一次重新启动子系统时与第n次重新启动子系统完成时之间的时间差T2,并将所述T2作为子系统初始时间保存到内存中,其中,所述n为大于1的整数。
[0065] 还需说明的是,在本实施例的系统重新启动过程中,也可能不会进行子系统重新启动过程,而直接由子系统引导系统进行重启过程,此时,则不需要执行步骤405-409,即不需要执行子系统初始时间获取过程,而在步骤404后,直接执行步骤410,进入系统初始时间获取过程,系统初始时间获取过程可参见步骤410-417,具体流程如下:
[0066] 步骤410:系统软件中的时间模块向驱动软件发送获取系统初始时间的请求。
[0067] 步骤411-412:驱动软件获取内存中保存的时间,内存将之前所保存的T1和T2都返回给驱动软件。
[0068] 在本步骤中,当没有进行子系统重新启动时,此时内存中仅仅保存了T1,只须将T1返回给驱动软件即可;当在子系统中多次进行重启时,则需将T1和求和后得到的T2返回给驱动软件。
[0069] 步骤413-414:驱动软件获取CPU时钟寄存器中的第一或第三时钟计数值,CPU时钟寄存器将自身的第一或第三时钟计数值返回给驱动软件。
[0070] 当系统重新启动时,CPU时钟寄存器被清零,因此,读取系统重新启动系统后CPU时钟寄存器中的时钟计数值即可得到系统重新启动时(如果没有进行子系统重新启动,CPU寄存器中存储的是第一时钟计数值;如果进行了子系统重启过程,则CPU寄存器中存储的是第三时钟计数值)与系统重新启动后这一时间的时间差。
[0071] 步骤415:驱动软件根据读取到的第一或第三时钟计数值和系统的时钟频率计算出T3。
[0072] 需要说明的是,在本步骤中,当没有进行子系统重新启动时,驱动软件直接将读取到的第一时钟计数值和系统时钟频率进行相乘,得到T3;当进行了子系统重新启动时,首先,驱动软件需要将读取到的第三时钟计数值和系统时钟频率进行相乘,得到T3’,然后,驱动软件还需将得到的T3’与从内存中获取到的T2进行求和,得到T3。
[0073] 步骤416:驱动软件将从内存中读到的T1与计算出的T3进行求和,即可得到系统初始时间。
[0074] 需要说明的是,步骤411-412和步骤413-415是并列执行且互不影响的两个过程,它们都是在驱动软件接收到获取系统初始时间的请求后进行的,并无先后顺序之分。
[0075] 步骤417:驱动软件将计算出的系统初始时间发送给时间模块。
[0076] 至此,即完成了图3中所述的系统初始时间获取过程。同样地,这里获取到的系统初始时间即系统重新启动后的准确的系统时间,此后,系统便将该系统初始时间作为系统时间。
[0077] 同现有技术一样,在系统正常运行期间,根据用户的实际需求,还可以对系统时间重新进行设置,得到用户希望的系统时间。然而,由于在本实施例中,并不存在实际的RTC,因而也就无需将重新设置好的系统时间再发送给RTC同步,仅仅执行如下步骤418即可,[0078] 步骤418:在时间模块接收到重新设置系统时间的命令后,对系统时间重新进行设置。
[0079] 至此,即完成了现有获取系统时间的整个工作流程。
[0080] 基于上述方法,图5为本发明实施例一获取系统时间装置的组成结构示意图,本实施例没有进行子系统重新启动过程,也即没有执行步骤405-409。如图5所示,该装置包括时间存储模块51、第一时间差运算模块52、系统时间运算模块53和系统时间设置模块54,其中,
[0081] 所述时间存储模块51,用于保存重新启动系统时的时间T1。
[0082] 所述第一时间差运算模块52,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,根据所述第一时钟计数值与系统时钟频率,得到重新启动系统时与重新启动系统完成时之间的时间差T3。
[0083] 进一步地,所述第一时间差运算模块52又包括第一时钟计数子模块521、第一时钟获取子模块522和第一时钟运算子模块523,其中,
[0084] 所述第一时钟计数子模块521,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值;
[0085] 所述第一时钟获取子模块522,用于获取所述第一时钟计数子模块521中记录的第一时钟计数值;
[0086] 所述第一时钟运算子模块523,用于将所述第一时钟获取子模块522获取到的第一时钟计数值与所述系统时钟频率进行相乘,得到T3。
[0087] 所述系统时间运算模块53,用于将所述时间存储模块51保存的T1与所述第一时钟运算子模块523中的T3进行求和,得到系统时间。
[0088] 所述系统时间设置模块54,用于在系统正常运行期间,接收到重新设置系统时间的命令后,对由所述系统时间运算模块53得到的系统时间重新进行设置。
[0089] 至此,即得了本发明实施例一所采用的获取系统时间装置,该装置的具体工作流程请参照图4所示方法实施例中的相应说明,此处不再赘述。
[0090] 基于本实施例获取系统时间的装置,图6给出了本发明实施例一所采用的RTC,如图6所示,该RTC包括:时间存储模块51和第一时钟计数子模块521,其中,[0091] 所述时间存储模块51,用于保存重新启动系统时的时间T1,供得到系统时间;
[0092] 所述第一时钟计数子模块521,用于记录重新启动系统时与重新启动系统完成时之间的第一时钟计数值,供得到重新启动系统时与重新启动系统完成时之间的时间差T3。
[0093] 至此,即得到了本实施例所采用的RTC的组成结构,该RTC的具体工作流程也参照图4所示方法实施例中的相应说明,此处不再赘述。
[0094] 基于上述方法,图7为本发明实施例二获取系统时间装置的组成结构示意图,在本实施例中,进行了子系统重新启动过程,也即执行了步骤405-409。如图7所示,该装置包括时间存储模块71、第二时间差运算模块72、第三时间差运算模块73、第一时间差求和模块74、系统时间运算模块75和系统时间设置模块76,其中,
[0095] 所述时间存储模块71,用于保存重新启动系统时的时间T1。
[0096] 所述第二时间差运算模块72,用于记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值,根据所述第二时钟计数值与系统时钟频率,得到重新启动子系统时与重新启动子系统完成时之间的时间差T2,
[0097] 进一步地,所述时间存储模块71,还用于保存所述第二时间差运算模块72得到的T2。
[0098] 具体地,所述第二时间差运算模块72又可包括:第二时钟计数子模块721、第二时钟获取子模块722和第二时钟运算子模块723,其中,
[0099] 所述第二时钟计数子模块721,用于记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值;
[0100] 所述第二时钟获取子模块722,用于获取所述第二时钟计数子模块721记录的第二时钟计数值;
[0101] 所述第二时钟运算子模块723,用于将所述第二时钟获取子模块722获取的第二时钟计数值与所述系统时钟频率进行相乘,得到T2。
[0102] 所述第三时间差运算模块73,用于记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值,根据所述第三时钟计数值与系统时钟频率,得到重新启动子系统完成时与重新启动系统完成时之间的时间差T3’。
[0103] 进一步地,所述第三时间差运算模块73又包括了:第三时钟计数子模块731、第三时钟获取子模块732和第三时钟运算子模块733,其中,
[0104] 所述第三时钟计数子模块731,用于记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值;
[0105] 所述第三时钟获取子模块732,用于获取所述第三时钟计数子模块731记录的第三时钟计数值;
[0106] 所述第三时钟运算子模块733,用于将所述第三时钟获取子模块732获取的第三时钟计数值与所述系统时钟频率进行相乘,得到T3’。
[0107] 所述第一时间差求和模块74,用于将所述时间存储模块71中保存的T2与所述第三时间差运算模块73得到的T3’进行求和,得到T3。
[0108] 所述系统时间运算模块75,用于将所述时间存储模块71保存的T1与所述第一时间差求和模块74得到的T2与T3’的和T3进行求和,得到系统时间。
[0109] 所述系统时间设置模块76,用于在系统正常运行期间,接收到重新设置系统时间的命令后,对由所述系统时间运算模块75得到的系统时间重新进行设置。
[0110] 至此,即得了本发明实施例二所采用的获取系统时间装置,该装置的具体工作流程也参照图4所示方法实施例中的相应说明,此处不再赘述。
[0111] 同样地,当进行了n次子系统重新启动过程时,本发明所采用的获取系统时间装置的组成结构类同图7,与图7不同之处仅在于,当进入子系统的次数为n时,所述第二时间差运算模块72,用于依次记录每次重新启动子系统时与该次重新启动子系统完成时之间的子时钟计数值,根据所述子时钟计数值与系统时钟频率,得到每次重新启动子系统时与该次重新启动子系统完成时之间的时间差,将n次时间差进行求和,得到第一次重新启动子系统时与第n次重新启动子系统完成时之间的时间差T2后,再将其保存到所述时间存储模块71中,其中,所述n为大于1的整数。
[0112] 基于本实施例获取系统时间的装置,图8给出了本发明实施例二所采用的RTC,如图8所示,该RTC包括:时间存储模块71、第二时钟计数子模块721和第三时钟计数子模块731,其中,
[0113] 所述时间存储模块71,用于保存重新启动系统时的时间T1,供得到系统时间。
[0114] 所述第二时钟计数子模块721,用于记录重新启动子系统时与重新启动子系统完成时之间的第二时钟计数值,供得到重新启动子系统时与重新启动子系统完成时之间的时间差T2。
[0115] 所述第三时钟计数子模块731,用于记录重新启动子系统完成时与重新启动系统完成时之间的第三时钟计数值,供得到重新启动子系统完成时与重新启动系统完成时之间的时间差T3’,
[0116] 所述时间存储模块,进一步用于保存所述第二时钟计数子模块721记录的第二时钟计数值与系统时钟频率进行相乘得到的T2,供得到重新启动系统时与重新启动系统完成时之间的时间差T3。
[0117] 进一步地,当进行子系统重新启动的次数为n时,所述第二时钟计数子模块721,则用于依次记录每次重新启动子系统时与该次重新启动子系统完成时之间的第二时钟计数值,供得到第一次重新启动子系统时与第n次重新启动子系统完成时之间的时间差T2;
[0118] 所述时间存储模块,还用于保存第二时钟计数子模块721所记录的n次第二时钟计数值与系统时钟频率进行相乘并求和后得到的T2,供得到重新启动系统时与重新启动系统完成时之间的时间差T3。
[0119] 至此,即得到了本发明所采用的RTC的组成结构,该RTC的具体工作流程也参照图4所示方法实施例中的相应说明,此处不再赘述。
[0120] 需要说明的是,本发明上述各实施例所采用的方法是有误差存在的,其中,最主要的误差有以下几个:
[0121] 一、重新启动系统时的时间T1与CPU时钟寄存器被清零之间的时间差dt1;
[0122] 二、得到重新启动子系统时与重新启动子系统完成时之间的时间差T2后,将T2保存到内存中、以及CPU时钟寄存器再次被清零之间的时间差dt2;
[0123] 三、得到重新启动系统时与重新启动系统完成时之间的时间差T3后,需要根据T1与T3计算得到系统时间的时间差dt3。
[0124] 然而,dt1和dt2包括的是一些硬件的反应时间和一些指令时间,dt3仅仅包括了指令时间,由于硬件的反应时间都很短暂,可以忽略不计;而指令时间都是固定值,也非常小,对于精度要求不高的情况也可以忽略不计,如果精度要求较高,可以加一些固定的值去补偿,具体如何补偿可通过反复多次测试来确定,并不是本发明核心,故此处不对其进行赘述。
[0125] 总之,本发明所采用的获取系统时间的方法,无需增加额外的硬件,仅仅利用系统中固有的内存和CPU时钟寄存器:首先,在重新启动系统时,保存重新启动系统时的时间;其次,记录重新启动时与重新启动完成时之间的时钟计数值,由所述记录的时钟计数值得到重新启动时与重新启动完成时之间的时间差;最后,由所述保存的时间与时间差进行求和,即可得到系统时间。由此,在对系统进行重新启动时,在误差允许的范围内(由上述硬件的反应时间以及指令时间所产生的误差通常在1秒左右,通过固定值补偿的方式可以进一步减小该误差),不仅能够获取到准确的系统时间,而且实现简单、使用方便。
[0126] 进一步地,当进行子系统重新启动时:子系统驱动软件根据读取的CPU时钟寄存器中的值还可以得到重新启动子系统时与重新启动子系统完成时之间的时间差,从而最终的系统时间还应包括该时间差,且在每次进入子系统时,都应计算出该时间差,并将所有的时间差都考虑到系统时间中,因而更加保证了系统时间的准确性。
[0127] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。