Some content of this application is unavailable at the moment.
If this situation persist, please contact us atFeedback&Contact
1. (WO2019001331) CLOCK TICK INTERRUPT CONFIGURATION METHOD AND DEVICE
Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093   0094   0095   0096   0097   0098   0099   0100   0101   0102   0103   0104   0105   0106   0107   0108   0109   0110   0111   0112   0113   0114   0115   0116   0117   0118   0119   0120   0121   0122   0123   0124   0125   0126   0127   0128   0129   0130   0131   0132   0133   0134   0135   0136   0137   0138   0139   0140   0141   0142   0143   0144   0145   0146   0147   0148   0149   0150   0151   0152   0153   0154   0155   0156   0157   0158   0159   0160   0161   0162   0163   0164   0165   0166   0167   0168   0169   0170   0171   0172   0173   0174   0175   0176   0177   0178   0179   0180   0181   0182   0183   0184   0185   0186   0187   0188   0189   0190   0191   0192   0193   0194   0195   0196   0197   0198   0199   0200   0201   0202   0203   0204   0205   0206   0207   0208   0209   0210   0211   0212   0213  

权利要求书

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22  

附图

1   2   3   4   5   6  

说明书

发明名称 : 一种时钟滴答中断设置方法及装置

[0001]
本申请要求2017年06月27日递交的申请号为201710500927.5、发明名称为“一种时钟滴答中断设置方法及装置”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。

技术领域

[0002]
本申请涉及计算机技术领域,特别是涉及一种时钟滴答中断设置方法、装置、设备和存储介质。

背景技术

[0003]
随着技术的发展,越来越重视RTOS(Real Time Operating System,实时操作系统)系统低功耗的要求。在最初,其低功耗设计思路比如:1.当Idle任务运行时,进入低功耗模式;2.在适当的条件下,通过tick中断或者外部事件唤醒MCU(Microprogrammed Control Unit,微控制单元。其本质为一片单片机,指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成的芯片级的计算机)。其中,Idle任务是空闲任务,其是系统中优先级最低的任务,在没有其他任务执行。其中,tick中断即为滴答中断,是系统时间的时间片基准。
[0004]
如图1,其是上述系统的一种任务调度示意图,图1中纵轴是任务轴,横轴是时间轴,T1、T2、T3、T4是4个等距时间片的tick中断。从图1中看出TaskA、TaskB、TaskC、TaskD、TaskE这5个任务调度之间,会有四次空闲期间Idle1、Idle2、Idle3、Idle4,为了降低功耗,在Idle任务运行时要处于低功耗模式在Idle1和Idle4运行期间,分别会在T1、T4位置产生一次滴答(tick)中断,唤醒MCU,唤醒后MCU又进入低功耗模式,因此,从第2点中可以看出,每次当RTOS系统时钟源计数器产生tick中断时,也会将MCU从低功耗中唤醒,然后MCU又进入低功耗模式,从低功耗模式中唤醒会使得MCU无法进入深度睡眠,对低功耗设计而言也是不合理的。
[0005]
为了避免上述情况,在在先技术中,在Idle任务中动态计算并设置下一次tick中断的时间,其Idle任务中的执行过程为:1、关闭系统抢占;2、基于当前系统时间计算并设置下一次tick中断的时间;3、CPU(Central Processing Unit,中央处理器)睡眠,从而MCU进入低功耗模式;4,CPU被任何除tick中断之外的中断唤醒后做系统时间的补偿;5、开启系统抢占。开启系统抢占后,具有更高优先级的任务就可以执行了。
[0006]
发明人在应用上述在先技术的在Idle任务中动态计算并设置下一次tick中断的时间的方案时发现:系统的任何除tick中断之外的其它中断都会唤醒MCU,然后去做时间补偿这个动作,而时间补偿这个动作涉及到除法运算,涉及到四舍五入,如果系统中断频繁的话,时间补偿这块的误差会很大,从而增加了系统时间的不准确性。
[0007]
发明内容
[0008]
本申请提供了一种时钟滴答中断设置方法、装置、设备和存储介质。
[0009]
本申请提供了如下方案:
[0010]
本申请实施例提供了一种滴答中断时间设置方法,包括:
[0011]
在滴答中断执行时,对系统时间进行补偿;
[0012]
如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间;
[0013]
当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[0014]
本申请实施例提供了一种滴答中断时间设置方法,包括:
[0015]
在滴答中断执行时,对系统时间进行补偿;
[0016]
如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[0017]
相应的,本申请实施例提供了一种滴答中断时间设置装置,包括:
[0018]
补偿模块,用于在滴答中断执行时,对系统时间进行补偿;
[0019]
第一中断设置模块,用于如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间;
[0020]
中断修正模块,用于当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[0021]
相应的,本申请实施例提供了一种滴答中断时间设置装置,包括:
[0022]
补偿模块,用于在滴答中断执行时,对系统时间进行补偿;
[0023]
第一中断设置模块,用于如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[0024]
本申请实施例还提供了一种设备,包括:
[0025]
一个或多个处理器;和
[0026]
其上存储的一个或多个计算机可读介质中的指令,由所述一个或多个处理器执行时,导致所述装置执行前述滴答中断时间设置方法。
[0027]
本申请实施例还提供了一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得设备执行前述滴答中断时间设置方法。
[0028]
根据本申请提供的具体实施例,本申请公开了以下技术效果:
[0029]
首先,整个方案是针对系统的tick中断本身设置的,因此本申请将系统的tick中断与Idle任务解耦,那么除tick中断之外的任何一个中断唤醒都不会触发时间补偿这个动作。
[0030]
其次,相对在Idle任务中设置下一个tick中断时间的方案,Idle这个任务只能控制本任务周期内的tick中断,比如图1中的Idle1中只能控制T1这个tick中断在靠着Task B开始时刻,无法全局把控整个系统中的tick中断。而本申请的tick中断是系统层级的动态tick方案,其是对整个系统的tick中断的控制。
[0031]
综上,本申请的上述方案提出了系统层级的动态tick的概念,在系统层级对系统的tick中断进行动态设置,将tick中断和Idle任务解耦,不在Idle任务中动态计算下一次tick中断的时间,因此不会关闭系统的抢占,进而也不存在频繁被tick中断之外的其他中断的情况,所以也不存在每次被打断并唤醒后做系统补偿的过程,从而降低了对系统时间进行补偿的次数,从而降低了涉及到四舍五入的除法运算的次数,进而降低了补偿时间这块累加的误差,相对在先技术提高了系统时间的准确性。
[0032]
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

[0033]
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0034]
图1是在先技术的tick中断示例图;
[0035]
图2是本申请实施例提供的一种滴答中断时间设置方法的流程图;
[0036]
图3是本申请实施例提供的tick中断示例图;
[0037]
图4是本申请实施例提供的另一种滴答中断时间设置方法的流程图;
[0038]
图5是本申请实施例提供的一种滴答中断时间设置装置的结构框图;
[0039]
图6是本申请实施例提供的另一种滴答中断时间设置装置的结构框图。

具体实施方式

[0040]
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本申请保护的范围。
[0041]
对于一个系统而言,比如MCU,tick次数直接对应系统时间,系统时间是由tick计数器进行计算,比如一个tick是10ms,那么1s就是100个tick。对于系统而言,其执行后续任何计算时,都需要以系统时间为基础。而由于系统可能处于睡眠状态,其tick计数器在睡眠过程中会处于停止计数状态。因此,tick中断后需要对系统时间进行补偿,补偿tick计数器在上述睡眠到被唤醒过程应该到达的计数值。
[0042]
在本申请实施例中,为了避免在先技术中在Idle任务中设置下一次tick中断的方案中,由于系统的任何除tick中断外的其他中断都会打断CPU的睡眠导致系统脱离低功耗模式,导致一旦CPU被唤醒就会执行对系统做时间补偿这个动作。而由于时间补偿这个动作涉及到除法运算,又涉及到四舍五入,比如以时钟的频率是30Mhz/s(兆赫兹每秒),那么针对时钟周期的计数timer_counter要转换为tick数就涉及到除法运算,假设timer_counter为111111111,那么其转换为tick数为111111111*(1/30M)=5.55……,按次数的四舍五入就得到6次tick。那么如果Idle任务中CPU被唤醒的次数过多,则会导致时间补偿这块的误差很大,从而造成系统时间的不准确性,带来时间上的不确定性,影响系统的运行。
[0043]
那么本申请可以在系统的每次tick中断执行时做如下几个动作:对系统时间进行补偿,在系统中有超时需求的超时任务的时候,基于补偿后的系统时间,根据这些超时任务设置下一次tick中断的时间。而由于系统的超时任务在其唤醒过程中,可能出现新的有超时需求的超时任务,而为了顺应tick中断的设计思路,即tick中断是为了正常执行任务,那么如果在上述tick中断之后直接进入睡眠而不对下一次tick中断的时间进行修改,可能出现cpu睡眠而任务超时时间过的情况,比如某个新的超时任务A的超时时间为1s,但是前面tick中断中设置的tick时间为2s,那么该超时任务A则不会正常执行,为了避免这种情况,则需要设置当系统在所述执行的滴答中断后进入低功耗模式时,根 据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。从而将系统的tick中断与Idle任务解耦,在系统层级对系统的tick中断进行动态设置,其是对整个系统的tick中断的控制,避免除tick中断之外的中断导致的时间补偿,从而降低了时间补偿的次数,降低了时间补偿的误差,提高了系统时间的准确性。
[0044]
关于本申请实施例中使用的术语的介绍:
[0045]
时钟周期:时钟周期确定CPU的运行频率,比如前述30Mhz/s,那么1个时钟周期为1/30M。
[0046]
tick:滴答,即时钟滴答,其是以N个时钟周期为一个滴答。
[0047]
timer_counter:时钟源计数器,其对时钟周期进行计数,有一个寄存器地址范围为一个周期,比如32位的为从0到0xffffffff为一个周期。
[0048]
tick计数器:记录tick次数,tick次数对应系统时间。比如1次tick为10ms,那么1s为100次tick,如此可以对应系统时间。
[0049]
tick中断:滴答中断,tick中断后唤醒CPU,使系统离开低能耗模式。
[0050]
tick中断计数器:记录达到多少次tick时执行中断,然后计数清理,进行下一次tick中断计数。
[0051]
tick中断之外的中断:比如键盘、鼠标、网络接口等一切非时间外设产生的中断。
[0052]
超时任务:任务先不执行,挂起等待唤醒的任务,其具有超时时间,比如一个任务要睡眠3s后唤起,则该超时时间为3s。
[0053]
低功耗模式:CPU进入睡眠状态,系统就进入低功耗模式。
[0054]
下面对具体的实现方式进行详细介绍。
[0055]
实施例一
[0056]
参见图2,其示出了一种滴答中断时间设置方法的步骤流程图,该方法具体可以包括以下步骤:
[0057]
步骤100,在滴答中断执行时,对系统时间进行补偿。
[0058]
在本申请实施例中,系统开始时,第一次tick中断的时间可以根据需求进行设置,那么之后的每次tick中断执行时,为了系统时间的准确性,都需要对系统时间进行补偿。
[0059]
并且,补偿后的系统时间是计算下次tick中断的时间的基础,因为如果系统的CPU睡眠,进入了低功耗模式,那么前述对应系统时间的tick计数器则会停止计数,那么为了保证系统的正常运行,则需要在CPU被唤醒后,对系统时间进行补偿。下次tick中断的时间是基于补偿后的系统时间进行计算的,如果不以补偿后的系统时间进行计算下次 tick中断的时间,则可能出现无法及时唤醒CPU处理任务等错误。
[0060]
可选的,在本申请实施例中可以预先设置一个时间阈值,将第一次tick中断的时间设置为该时间阈值。可以理解,在系统初始时刻设置第一次tick中断时间为所述时间阈值。
[0061]
需要说明的是,在实际设备中,由于时钟源计数器的寄存器地址有一个范围,比如32位时钟源计数器的寄存器地址范围是从0到0xffffffff,因此其最大地址对应一个最大时间。那么设置的时间阈值不能超过时钟源计数器能够记录的最大时间,因为到达最大地址后,时钟源计数器又从0开始计数,会导致tick时间遗漏,从而导致系统时间不准确。
[0062]
因此,本申请实施例中设置的时间阈值对应的计数地址不大于时钟源计数器总的计数地址。
[0063]
那么假设比最大地址0xffffffff对应的时间为40s,那么时间阈值不能大于40s。比如可以设置为10s,那么10s对应的计数地址必然小于最大地址0xffffffff。需要说明的是时间阈值的具体值可以在最大地址对应的时间范围内,根据实际需求设置,本申请实施例不对其加以限制。
[0064]
那么在第一次中断执行时,就开始对系统时间进行补偿,然后动态设置下一次tick中断的时间。后续每一次中断执行时,也对系统时间进行补偿,然后动态设置相应的下一次tick中断的时间。
[0065]
在本申请实施例中,可选的,步骤100包括:
[0066]
步骤S11,获取针对系统时间的滴答计数器在上次睡眠时的睡眠滴答次数,以及从上次睡眠时刻到当前时刻经过的时钟源计数器计数值;
[0067]
步骤S12,将所述时钟源计数器计数值转换为补偿滴答次数并与所述睡眠滴答次数相加,得到当前系统时间的滴答次数。
[0068]
每次系统进入低能耗模式时,其系统时间计算过程也停止,系统会在指定位置记录上次睡眠时刻的睡眠系统时间、记录时钟源计数器在睡眠时刻的计数值。那么在CPU该次睡眠后,被紧跟着的下次tick中断唤醒,那么在该次中断唤醒中,就可以获取上次睡眠时刻的睡眠系统时间t1和该时刻的计数值m,然后读取时钟源计数器当前的计数值n,然后用m-n就得到从上次睡眠到当前时刻所经过的计数值k。然后将该k根据系统时钟频率转换为补偿时间t2,然后t1+t2就是系统的当前时间。
[0069]
在本申请实际应用中,系统时间是通过tick计数器记录的,那么在CPU睡眠时,tick 计数器也停止,比如此时为t1次。在CPU唤醒时,获取tick计数器在上次睡眠的时候的数值t1。假设时钟频率为p1(Mhz)那么前述然后读取k=[(m-n)/p1M],其中符号“[]”表示四舍五入取整的值。然后,修改tick计数器的值为k+t1,就得到补偿后的系统时间了。
[0070]
当然,上述时间补偿过程仅仅为一种示例,也可以采用其他方式进行时间补偿,本申请实施例并不对其加以限制。
[0071]
步骤102,如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[0072]
需要说明的是,在实际应用中,当系统有需求超时的任务,会将超时的任务挂载到超时链表中,那么本申请可以根据超时链表中的超时任务设置下一次tick中断的时间。
[0073]
可以理解,如果所述滴答中断执行时没有超时任务,则设置下一次滴答中断的时间为上述时间阈值。
[0074]
可选的,步骤102包括:
[0075]
步骤S21,如果所述滴答中断执行时有超时任务,从所述超时任务中获取最短超时时间;
[0076]
步骤S22,确定所述最短超时时间经过后对应的系统时间和所述补偿后的系统时间之间的间隔时间;
[0077]
步骤S23,根据所述间隔时间设置下一次滴答中断的时间。
[0078]
在本申请实施例中,需要先判断系统中有没有超时任务,在没有超时任务时为了保证系统的正常运行,即使系统中没有任何超时任务,也需要进行tick中断。那么在系统中没有任何超时任务时,下一次tick中断的时间可以直接设置为前述的中断阈值。
[0079]
而在系统中有超时任务时,在当前的tick中断中,则需要根据超时任务的超时时间距离当前中断时刻之间的间隔时间去设置下一次tick中断的时间。
[0080]
比如图3中的5个超时任务Task A、Task B、Task C、Task D、Task E。其中Task A在对应的tick中断T0(图中未示出)唤醒后已经执行,在Task A中前的tick中断中设置中断时间时,要考虑后续Task B、Task C、Task D、Task E的超时时间。比如TaskA、Task B、Task C、Task D、Task E分别为3s、5s、7s、9s、20s。那么T0中断后超时任务还有Task B、Task C、Task D、Task E,此时要获取其中最短的超时时间为5s。
[0081]
然后根据5s经过后对应的系统时间,和当前补偿后实际的系统时间,去计算时间间隔。简单理解,就是下一次tick的时间与当前的系统时间之间的差值。那么,在没有任 何误差的情况下,上述例子的间隔时间为5-3=2s。那么对于T0中断设置T1中断的时间为2s。在实际应用中可以调用tick中断设置函数设置tick中断时间为2s。
[0082]
需要说明的是,在由于超时任务是挂载在超时链表中的,而超时链表是按照超时时间对任务进行先后排序的,那么本申请实施例中可以直接获取超时链表头部的超时任务的时间即得到最短的超时时间。
[0083]
当然,对于其他形式排序的超时任务,也可以按照相应方式获取最短的超时时间,本申请实施例不对其加以限制。
[0084]
对于上述超时链表中的任务而言,当头部的超时任务被唤醒后,则会将该超时任务从头部移出。
[0085]
当然,本申请实施例中的超时任务也可以放在其他类型的超时队列中,本申请实施例中不对其加以限制。
[0086]
可选的,步骤S22包括:
[0087]
步骤S221,获取所述最短超时时间对应基于系统时间的系统超时时间;
[0088]
步骤S222,将所述系统超时时间减去所述补偿后的系统时间,获得所述间隔时间。
[0089]
在本申请实施例中,在有一个或者多个超时任务时,首先要从这些任务中获取最短的超时时间,然后计算该超时时间距离当前中断时刻的间隔时间。
[0090]
当然在实际应用中,对于前述将最短超时时间任务排在超时链表头部的情况,在判断超时链表头部当前的超时任务不是上次的头部的超时任务后,则意味着上次的超时任务被唤醒,那么此时需要计算头部当前的超时任务的上述间隔时间。换而言之,本申请要获取超时任务被唤醒时到当前系统时间之间的时间间隔。
[0091]
在本申请实施例中,对于一个在唤醒时新接收到的超时任务,在睡眠函数被调用时将该超时加入超时链表时,会将该超时时间对应上完成该超时时间的系统时间。比如睡眠时的系统时间为10分10秒,新加入的超时任务的超时时间为5秒,那么该超时时间对应基于系统时间的系统超时时间是10分15秒,也即意味着系统时间到达10分15秒时该超时任务被唤醒。
[0092]
对于前述例子而言,比如T0之前CPU睡眠时的时间为10分10秒,0中断中补偿后的系统时间为10分13秒,获取Task B对应基于系统时间的系统超时时间10分15秒。那么以该10分15秒减去10分13秒,就得到时间间隔2s。
[0093]
比如T1之前CPU睡眠时的时间为10分14秒,T1中断补偿后的系统时间为10分15秒,获取Task C对应基于系统时间的系统超时时间10分17秒。那么以该10分17 秒减去10分15秒,就得到时间间隔2s。其他情况以此类推。
[0094]
当然,在实际应用中,系统时间是以tick数进行计数的,比如上述例子10分15秒、10分13秒分别对应一个tick数值,那么上述时间间隔也是一个tick数值。
[0095]
当然,需要说明的是,如果超时链表中的超时任务的超时时间是按照系统时间计算而记录的,其超时时间就是其被唤醒时的系统时间,比如其挂载时的系统时间是10分00秒,其需要沉睡5秒,其记录的超时时间为10分05秒。那么,可以直接获取该超时时间,在计算间隔时间时,可以直接以该超时时间减去当前系统时间,该系统时间即可以为前述tick唤醒后进行过时间补偿的时间。上述具体的计算间隔时间的方式本申请实施例不对其加以限制。
[0096]
可选的,步骤S23包括:
[0097]
步骤S231,判断所述间隔时间是否大于时间阈值;
[0098]
步骤S232,如果所述间隔时间大于等于所述时间阈值,则设置下次滴答中断时间为所述时间阈值;
[0099]
步骤S233,如果所述超时时间小于所述时间阈值,则设置下次滴答中断时间为所述间隔时间。
[0100]
比如前述图3的例子中,假设3s、5s、7s、9s、20s被加入超时链表时的系统时间为0s,那么3s、5s、7s、9s、20s对应的系统时间就为3s、5s、7s、9s、20s。T1中断执行时,超时链表中任务还有Task C、Task D、Task E,超时时间分别为7s、9s、20s,那么最短超时时间为7s。通过前述过程计算该7s距离当前中断的间隔时间为7-5=2s。此时,先判断出2s小于10s,那么此时设置T1的下次tick中断T2的时间2s。
[0101]
同理,对于T2中断执行时,其还有Task D、Task E,那么超时最短时间为9s,计算的间隔时间为9-7s=2s,2s小于10s,那么在T2中断中设置T3的时间为2s。
[0102]
而对于T3中断执行时,超时任务还有Task E,其超时时间为20s,计算到当前中断时刻的间隔时间为20-9=16s,16s大于10s,那么设置下一次tick中断T4的时间为10s。
[0103]
然后在T4中断执行时,超时任务还有Task E,其间隔时间为20s,计算到当前中断时刻的间隔时间为20-19=6s,6s小于10s,那么在T4中断中设置T5的时间为6s。
[0104]
在实际应用中,在确定了下一次tick中断的时间后,可以将该时间转换为tick中断计数器的计数值L,然后将该计数值L存放于tick中断计数器的比较寄存器中,若tick中断计数器的计数值增长到与该比较寄存器中记录的数值一致,则产生中断。
[0105]
当然,在实际应用中,由于系统时间为tick计数器的计数,那么对于时间阈值,也将其转换为相应的tick次数,比如tick周期为100hz,那么10s的时间阈值就为1000次。那么,下次tick的时间也是一个tick数。因此,可以独立于tick计数器和时钟源计数器,另外设置一个tick中断计数器,去记录tick的次数是否达到上述下次tick中断的次数,如果达到,则产生tick中断,然后tick中断计数器清0,进行下一次的计数。
[0106]
步骤104,当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[0107]
在系统唤醒期间可能处理各种任务,接收得到各种新的超时任务,那么系统会将新接收到的超时任务挂载到超时链表中,此时就需要以更新的超时任务,对所述下一次滴答中断的时间进行修正操作。因为,如果一旦存在超时时间比超时链表中原来的最短的超时时间还短的超时任务,那么如果不修正tick中断的时间,则该超时任务无法被唤醒。
[0108]
可选的,步骤104包括:
[0109]
步骤S31,当系统在所述执行的滴答中断后进入低功耗模式时,当有新的超时任务且对应的超时时间短于原有超时任务的最短时间,则根据新的超时任务的最短时间对所述下一次滴答中断的时间进行修正操作;
[0110]
步骤S32,当有新的超时任务且对应的超时时间不短于原有超时任务的最短时间,或没有新的超时任务,则维持所述下一次滴答中断的时间不变。
[0111]
可以理解,当系统调用睡眠函数使CPU睡眠,从而使系统进入低功耗模式时,会将新的超时任务挂载到超时链表中,对超时链表进行重排序。那么可能存在下面几种情况:
[0112]
1、存在新的超时任务的超时时间比原有的超时时间短的超时任务;
[0113]
2、存在新的超时任务的超时时间比原有的超时时间一样的超时任务;
[0114]
3、存在新的超时任务的超时时间比原有的超时时间长的超时任务;
[0115]
那么对于1而言,就需要将前面设置的tick中断的时间进行修改,对于2、3可以不进行修改。因此,可以理解,上述修正操作可以包括修改、不处理两种操作。
[0116]
以图3中的Task C、Task D、Task E为例。此时CPU唤醒执行任务TaskB,这个过程中有Task M新出现,TaskM的超时时间为6s。那么超时链表中的超时任务按时间排序为TaskM(6s)、Task C(7s)、Task D(9s)、Task(20s),那么TaskM比T1中断为T2中断的TaskC设置的中断要早1s,那么此时要调用tick中断时间设置函数将T2中断的时间从2s修改为1s。另外,假使TaskM的超时时间为7s或者大于7s,其超时时间就对T2中断的时间没有任何影响,则不用对其进行修改,对T2中断的时间不做 处理。其他情况以此类推。
[0117]
当然上述睡眠函数对超时链表的调整结果仅仅为一种示例,本申请实施例不对其加以限制。
[0118]
在实际应用中,睡眠函数对超时链表的调整可以采用多种方式,比如以已同一个时间起点,将超时任务输入的初始超时时间修改为基于时间起点的超时时间,比如TaskB、Task C、Task D、Task E都是以0s为时间起点,假使TaskM初始要求的睡眠时间实际上是要睡眠1s,由于经过了TaskB的5s,那么TaskM以0s为起点的超时时间为5+1=6s,那么即得到前述TaskM(6s)、Task C(7s)、Task D(9s)、Task(20s)的超时链表。当然睡眠函数对超时链表的调整还可以对已有的超时任务去掉实际经过的时间,比如Task B、Task C、Task D、Task E的实际的睡眠时间就是5s、7s、9s、20s,那么在T1中断设置时说明经过了5s,那么睡眠函数在对超时链表处理时,可以先减掉经过的5s,那么Task C、Task D、Task E的剩余的超时时间就分别为2s、7s、15s,此时对于实际睡眠1s的TaskM,其加入超时链表后是TaskM(1s)、Task C(2s)、Task D(7s)、Task(15s)。本申请对睡眠函数如何对超时链表调整不加以限制,只需保证超时任务的超时时间属于同一个参考系即可,从而保证任务被唤醒时刻符合其本身的需求。
[0119]
在本申请实施例中,睡眠函数被调用时,不会更改超时链表中原有的超时任务的超时时间。对于睡眠之前出现的新的超时任务,根据其被唤醒的实际需求时间将其插入到超时链表中,比如在睡眠之前的唤醒状态中接收到一个超时任务,该任务要求在睡眠之后要在第5s唤醒,那么睡眠函数则将该任务加入超时链表,并在链表中记录其超时时间为5s。另外,由于要修正tick,则会获取该新的超时任务的超时时间对应的系统时间,比如睡眠时的系统时间为10分30秒,那么其超时时间对应的系统时间为10分35秒。
[0120]
通过上述本申请实施例的方案,具有以下优点:
[0121]
首先,整个方案是针对系统的tick中断本身设置的,因此本申请将系统的tick中断与Idle任务解耦,那么除tick中断之外的任何一个中断唤醒都不会触发时间补偿这个动作。
[0122]
其次,相对在Idle任务中设置下一个tick中断时间的方案,Idle这个任务只能控制本任务周期内的tick中断,比如图1中的Idle1中只能控制T1这个tick中断在靠着Task B开始时刻,无法全局把控整个系统中的tick中断。而本申请的tick中断是系统层级的动态tick方案,其是对整个系统的tick中断的控制。
[0123]
其次,相对在先技术中,在Idle任务里面做时间补偿的过程,牵扯到Idle任务、CPU 和其他任务,处理逻辑非常复杂,因此其执行语句复杂,执行时间长,并且由于关闭了抢占,Idle任务是最低优先级的任务,那么其高优先级的任务得不到调度,会影响实时性。本申请的tick中断与Idle任务解耦,是在tick中断中做的时间补偿,而不是在Idle任务里面做时间补偿,处理逻辑简单,因此本申请实施例的补偿过程简单,不关闭抢占,对实时性影响低。
[0124]
再次,本申请tick中断中设置下次tick时间后,再在系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作,保证了新加入的任务也能够正常被tick中断唤醒,避免系统出错。
[0125]
实施例二
[0126]
参见图4,其示出了一种滴答中断时间设置方法的步骤流程图,该方法具体可以包括以下步骤:
[0127]
步骤200,在滴答中断执行时,对系统时间进行补偿;
[0128]
步骤202,如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[0129]
步骤200、202与实施例一的步骤100,102原理类似,在此不再详述。
[0130]
可选的,在本申请一实施例中,还包括:
[0131]
步骤204,当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[0132]
步骤204与实施例一的步骤104原理类似,在此不再详述。
[0133]
该步骤是为了保证了新加入的任务也能够正常被tick中断唤醒,避免系统出错。
[0134]
可选的,在本申请一实施例中,步骤202包括:
[0135]
子步骤B11,如果所述滴答中断执行时有超时任务,从所述超时任务中获取最短超时时间;
[0136]
子步骤B12,确定所述最短超时时间经过后对应的系统时间和所述补偿后的系统时间之间的间隔时间;
[0137]
子步骤B13,根据所述间隔时间设置下一次滴答中断的时间。
[0138]
子步骤B11-B13参照实施例一的子步骤S21-S23原理类似,在此不再详述。
[0139]
可选的,在本申请一实施例中,所述子步骤B13包括:
[0140]
子步骤B131,判断所述间隔时间是否大于时间阈值;
[0141]
子步骤B132,如果所述间隔时间大于等于所述时间阈值,则设置下次滴答中断时间 为所述时间阈值;
[0142]
子步骤B133,如果所述超时时间小于所述时间阈值,则设置下次滴答中断时间为所述间隔时间。
[0143]
子步骤B131-B133参照实施例一的子步骤S231-S233原理类似,在此不再详述。
[0144]
可选的,在本申请一实施例中,所述子步骤B12包括:
[0145]
子步骤B121,获取所述最短超时时间对应基于系统时间的系统超时时间;
[0146]
子步骤B122,将所述系统超时时间减去所述补偿后的系统时间,获得所述间隔时间。
[0147]
子步骤B121-B122参照实施例一的子步骤S221-S222原理类似,在此不再详述。
[0148]
可选的,在本申请一实施例中,所述时间阈值对应的计数地址不大于时钟源计数器总的计数地址。
[0149]
可选的,在本申请一实施例中,还包括:在系统初始时刻设置第一次滴答中断时间为所述时间阈值。
[0150]
可选的,在本申请一实施例中,步骤204包括:
[0151]
子步骤B21,当系统在所述执行的滴答中断后进入低功耗模式时,当有新的超时任务且对应的超时时间短于原有超时任务的最短时间,则根据新的超时任务的最短时间对所述下一次滴答中断的时间进行修正操作;
[0152]
子步骤B22,当有新的超时任务且对应的超时时间不短于原有超时任务的最短时间,或没有新的超时任务,则维持所述下一次滴答中断的时间不变。
[0153]
子步骤B21-B22参照实施例一的子步骤S31-S32原理类似,在此不再详述。
[0154]
可选的,在本申请一实施例中,步骤200包括:
[0155]
子步骤B31,获取针对系统时间的滴答计数器在上次睡眠时的睡眠滴答次数,以及从上次睡眠时刻到当前时刻经过的时钟源计数器计数值;
[0156]
子步骤B32,将所述时钟源计数器计数值转换为补偿滴答次数并与所述睡眠滴答次数相加,得到当前系统时间的滴答次数。
[0157]
子步骤B31-B32参照实施例一的子步骤S11-S12原理类似,在此不再详述。
[0158]
可选的,还包括:如果所述滴答中断执行时没有超时任务,则设置下一次滴答中断的时间为时间阈值。
[0159]
本申请实施例的步骤原理与实施例一类似的步骤原理类似,在此不再详述。
[0160]
上述实施例具备如下几个优点:
[0161]
首先,整个方案是针对系统的tick中断本身设置的,因此本申请将系统的tick中断 与Idle任务解耦,那么除tick中断之外的任何一个中断唤醒都不会触发时间补偿这个动作。
[0162]
其次,相对在Idle任务中设置下一个tick中断时间的方案,Idle这个任务只能控制本任务周期内的tick中断,比如图1中的Idle1中只能控制T1这个tick中断在靠着Task B开始时刻,无法全局把控整个系统中的tick中断。而本申请的tick中断是系统层级的动态tick方案,其是对整个系统的tick中断的控制。
[0163]
其次,相对在先技术中,在Idle任务里面做时间补偿的过程,牵扯到Idle任务、CPU和其他任务,处理逻辑非常复杂,因此其执行语句复杂,执行时间长,并且由于关闭了抢占,Idle任务是最低优先级的任务,那么其高优先级的任务得不到调度,会影响实时性。本申请的tick中断与Idle任务解耦,是在tick中断中做的时间补偿,而不是在Idle任务里面做时间补偿,处理逻辑简单,因此本申请实施例的补偿过程简单,不关闭抢占,对实时性影响低。
[0164]
实施例三
[0165]
参见图5,其示出了一种滴答中断时间设置装置的结构示意图,该装置具体可以包括以下模块:
[0166]
补偿模块302,用于在滴答中断执行时,对系统时间进行补偿;
[0167]
第一中断设置模块304,用于如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间;
[0168]
中断修正模块306,用于当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[0169]
可选的,所述第一中断设置模块204包括:
[0170]
超时时间获取子模块,用于如果所述滴答中断执行时有超时任务,从所述超时任务中获取最短超时时间;
[0171]
间隔时间确定子模块,用于确定所述最短超时时间经过后对应的系统时间和所述补偿后的系统时间之间的间隔时间;
[0172]
设置子模块,用于根据所述间隔时间设置下一次滴答中断的时间。
[0173]
可选的,所述设置子模块包括:
[0174]
阈值判断单元,用于判断所述间隔时间是否大于时间阈值;
[0175]
第一设置单元,用于如果所述间隔时间大于等于所述时间阈值,则设置下次滴答中断时间为所述时间阈值;
[0176]
第二设置单元,用于如果所述超时时间小于所述时间阈值,则设置下次滴答中断时间为所述间隔时间。
[0177]
可选的,所述间隔时间确定子模块包括:
[0178]
转换单元,用于获取所述最短超时时间对应基于系统时间的系统超时时间;
[0179]
间隔时间获取单元,用于将所述系统超时时间减去所述补偿后的系统时间,获得所述间隔时间。
[0180]
可选的,所述时间阈值对应的计数地址不大于时钟源计数器总的计数地址。
[0181]
可选的,还包括:
[0182]
初始设置模块,用于在系统初始时刻设置第一次滴答中断时间为所述时间阈值。
[0183]
可选的,所述中断修正模块206包括:
[0184]
修正子模块,用于当系统在所述执行的滴答中断后进入低功耗模式时,当有新的超时任务且对应的超时时间短于原有超时任务的最短时间,则根据新的超时任务的最短时间对所述下一次滴答中断的时间进行修正操作;
[0185]
维持子模块,用于当有新的超时任务且对应的超时时间不短于原有超时任务的最短时间,或没有新的超时任务,则维持所述下一次滴答中断的时间不变。
[0186]
可选的,所述补偿模块包括:
[0187]
计时获取子模块,用于获取针对系统时间的滴答计数器在上次睡眠时的睡眠滴答次数,以及从上次睡眠时刻到当前时刻经过的时钟源计数器计数值;
[0188]
补偿子模块,用于将所述时钟源计数器计数值转换为补偿滴答次数并与所述睡眠滴答次数相加,得到当前系统时间的滴答次数。
[0189]
可选的,还包括:
[0190]
第二中断设置模块,用于如果所述滴答中断执行时没有超时任务,则设置下一次滴答中断的时间为时间阈值。
[0191]
在本申请实施例中,还提供了一种设备,包括:一个或多个处理器;和
[0192]
其上存储的一个或多个计算机可读介质中的指令,由所述一个或多个处理器执行时,导致所述装置执行包括如下步骤方法:
[0193]
在滴答中断执行时,对系统时间进行补偿;
[0194]
如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间;
[0195]
当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的 超时任务,对所述下一次滴答中断的时间进行修正操作。
[0196]
当然,其还可以执行实施例一种其他涉及的步骤,其具体执行的步骤可以参照实施例相应步骤的描述。
[0197]
在本申请实施例中,还提供了一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得设备执行的实施例一的滴答中断时间设置方法。
[0198]
在本申请实施例中,还提供了一种设备,包括:一个或多个处理器;和
[0199]
其上存储的一个或多个计算机可读介质中的指令,由所述一个或多个处理器执行时,导致所述装置执行包括如下步骤方法:
[0200]
在滴答中断执行时,对系统时间进行补偿;
[0201]
如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[0202]
当然,其还可以执行实施例二种其他涉及的步骤,其具体执行的步骤可以参照实施例相应步骤的描述。
[0203]
在本申请实施例中,还提供了一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得设备执行的实施例一的滴答中断时间设置方法。
[0204]
实施例四
[0205]
参见图6,其示出了一种滴答中断时间设置装置的结构示意图,该装置具体可以包括以下模块:
[0206]
补偿模块402,用于在滴答中断执行时,对系统时间进行补偿;
[0207]
第一中断设置模块404,用于如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间.
[0208]
可选的,还包括:中断修正模块306,用于当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[0209]
当然本申请实施例还可以包括实施例三中的可选的模块。
[0210]
关于上述实施例二中各模块的具体实现,参照实施例一与模块对应的步骤的描述,这里不再赘述。
[0211]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产 品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
[0212]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0213]
以上对本申请所提供的一种滴答中断时间设置方法、装置、设备和存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。

权利要求书

[权利要求 1]
一种滴答中断时间设置方法,其特征在于,包括: 在滴答中断执行时,对系统时间进行补偿; 如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间; 当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[权利要求 2]
根据权利要求1所述的方法,其特征在于,所述如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间的步骤,包括: 如果所述滴答中断执行时有超时任务,从所述超时任务中获取最短超时时间; 确定所述最短超时时间经过后对应的系统时间和所述补偿后的系统时间之间的间隔时间; 根据所述间隔时间设置下一次滴答中断的时间。
[权利要求 3]
根据权利要求2所述的方法,其特征在于,所述根据所述间隔时间设置下一次滴答中断的时间的步骤包括: 判断所述间隔时间是否大于时间阈值; 如果所述间隔时间大于等于所述时间阈值,则设置下次滴答中断时间为所述时间阈值; 如果所述超时时间小于所述时间阈值,则设置下次滴答中断时间为所述间隔时间。
[权利要求 4]
根据权利要求2所述的方法,其特征在于,所述确定所述最短超时时间经过后对应的系统时间和所述补偿后的系统时间之间的间隔时间的步骤,包括: 获取所述最短超时时间对应基于系统时间的系统超时时间; 将所述系统超时时间减去所述补偿后的系统时间,获得所述间隔时间。
[权利要求 5]
根据权利要求3所述的方法,其特征在于,所述时间阈值对应的计数地址不大于时钟源计数器总的计数地址。
[权利要求 6]
根据权利要求3所述的方法,其特征在于,还包括: 在系统初始时刻设置第一次滴答中断时间为所述时间阈值。
[权利要求 7]
根据权利要求1所述的方法,其特征在于,所述当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的 时间进行修正操作的步骤,包括: 当系统在所述执行的滴答中断后进入低功耗模式时,当有新的超时任务且对应的超时时间短于原有超时任务的最短时间,则根据新的超时任务的最短时间对所述下一次滴答中断的时间进行修正操作; 当有新的超时任务且对应的超时时间不短于原有超时任务的最短时间,或没有新的超时任务,则维持所述下一次滴答中断的时间不变。
[权利要求 8]
根据权利要求1所述的方法,其特征在于,所述在滴答中断执行时,对系统时间进行补偿的步骤,包括: 获取针对系统时间的滴答计数器在上次睡眠时的睡眠滴答次数,以及从上次睡眠时刻到当前时刻经过的时钟源计数器计数值; 将所述时钟源计数器计数值转换为补偿滴答次数并与所述睡眠滴答次数相加,得到当前系统时间的滴答次数。
[权利要求 9]
根据权利要求1所述的方法,其特征在于,还包括: 如果所述滴答中断执行时没有超时任务,则设置下一次滴答中断的时间为时间阈值。
[权利要求 10]
一种滴答中断时间设置方法,其特征在于,包括: 在滴答中断执行时,对系统时间进行补偿; 如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[权利要求 11]
一种滴答中断时间设置装置,其特征在于,包括: 补偿模块,用于在滴答中断执行时,对系统时间进行补偿; 第一中断设置模块,用于如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间; 中断修正模块,用于当系统在所述执行的滴答中断后进入低功耗模式时,根据进入低功耗模式时更新的超时任务,对所述下一次滴答中断的时间进行修正操作。
[权利要求 12]
根据权利要求11所述的装置,其特征在于,所述第一中断设置模块包括: 超时时间获取子模块,用于如果所述滴答中断执行时有超时任务,从所述超时任务中获取最短超时时间; 间隔时间确定子模块,用于确定所述最短超时时间经过后对应的系统时间和所述补偿后的系统时间之间的间隔时间; 设置子模块,用于根据所述间隔时间设置下一次滴答中断的时间。
[权利要求 13]
根据权利要求12所述的装置,其特征在于,所述设置子模块包括: 阈值判断单元,用于判断所述间隔时间是否大于时间阈值; 第一设置单元,用于如果所述间隔时间大于等于所述时间阈值,则设置下次滴答中断时间为所述时间阈值; 第二设置单元,用于如果所述超时时间小于所述时间阈值,则设置下次滴答中断时间为所述间隔时间。
[权利要求 14]
根据权利要求12所述的装置,其特征在于,所述间隔时间确定子模块包括: 转换单元,用于获取所述最短超时时间对应基于系统时间的系统超时时间; 间隔时间获取单元,用于将所述系统超时时间减去所述补偿后的系统时间,获得所述间隔时间。
[权利要求 15]
根据权利要求13所述的装置,其特征在于,所述时间阈值对应的计数地址不大于时钟源计数器总的计数地址。
[权利要求 16]
根据权利要求13所述的装置,其特征在于,还包括: 初始设置模块,用于在系统初始时刻设置第一次滴答中断时间为所述时间阈值。
[权利要求 17]
根据权利要求11所述的装置,其特征在于,所述中断修正模块包括: 修正子模块,用于当系统在所述执行的滴答中断后进入低功耗模式时,当有新的超时任务且对应的超时时间短于原有超时任务的最短时间,则根据新的超时任务的最短时间对所述下一次滴答中断的时间进行修正操作; 维持子模块,用于当有新的超时任务且对应的超时时间不短于原有超时任务的最短时间,或没有新的超时任务,则维持所述下一次滴答中断的时间不变。
[权利要求 18]
根据权利要求11所述的装置,其特征在于,所述补偿模块包括: 计时获取子模块,用于获取针对系统时间的滴答计数器在上次睡眠时的睡眠滴答次数,以及从上次睡眠时刻到当前时刻经过的时钟源计数器计数值; 补偿子模块,用于将所述时钟源计数器计数值转换为补偿滴答次数并与所述睡眠滴答次数相加,得到当前系统时间的滴答次数。
[权利要求 19]
根据权利要求11所述的装置,其特征在于,还包括: 第二中断设置模块,用于如果所述滴答中断执行时没有超时任务,则设置下一次滴答中断的时间为时间阈值。
[权利要求 20]
一种滴答中断时间设置装置,其特征在于,包括: 补偿模块,用于在滴答中断执行时,对系统时间进行补偿; 第一中断设置模块,用于如果所述滴答中断执行时有超时任务,则根据所述超时任务以及补偿后的系统时间设置下一次滴答中断的时间。
[权利要求 21]
一种处理设备,其特征在于,包括: 一个或多个处理器;和 其上存储的一个或多个计算机可读介质中的指令,由所述一个或多个处理器执行时,导致所述处理设备执行如权利要求1-10其中一个或多个的方法。
[权利要求 22]
一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得设备执行的权利要求1-10其中一个或多个的方法。

附图

[ 图 1]  
[ 图 2]  
[ 图 3]  
[ 图 4]  
[ 图 5]  
[ 图 6]