SylixOS高精度时钟分析
admin
2023-03-15 09:01:13
0

1.Tick工作原理简介

Tick工作原理其实就是硬件定时器的工作原理,1个系统tick就代表一个定时器硬件中断。定时器的工作原理很简单,就是内部有一个递减的计数器,当减到0时产生一个中断,如图 1-1所示:

SylixOS高精度时钟分析

1-1定时器工作原理

假设定时器模块的输入频率是1MHz,系统定义的1S内tick数是100,也就是100Hz,可以计算出递减计数器要设置的值为1MHz/100Hz=10000。可以看出递减计数器相当于一个分频器,输入端每来一个脉冲,其值就减去1,当减到0时产生一个中断,同时其值自动重载成10000,如此循环下去。

2.系统获取时间操作

系统获取时间相关接口是基于tick来工作的,但是这是有误差的,如图 2-1所示:

SylixOS高精度时钟分析

2-1系统获取时间

虚线表示下一个tick中断还未产生,如果此时来获取时间,获取到的时间只是之前tick累计的时间。假设tick中断产生时刻和获取时间那一时刻之间的跨度是4ms,那么获取的时间就有4ms的误差,高精度时钟就是为了消除这种误差而诞生的。

3.高精度时钟原理

3.1基本原理

上述误差产生的根本原因是没有将tick中断产生时刻和获取时间那一时刻之间的跨度更新到时间里去,如果计算出这段时间并加到获取的时间里去就可以校正获取的时间了。结合图 1-1和图 2-1,基本的校正原理如下所述:

  • 1tick时间等价于递减计数器的初始值,假设是10000,也就是说递减10000次相当于过了一个tick时间

  • 1000 * 1000 * 1000 / 10000得到递减一次的时间,单位是ns

  • 用计数器初始值减去获取时间那一时刻计数器中的值,就得到了获取时间时刻计数器已经递减的次数

  • 用递减一次的时间 *递减的次数,就得到tick中断产生时刻和获取时间那一时刻之间的时间跨度

3.2特殊情况

当系统是多核时,系统产生一个由CPU0来处理的tick中断,当CPU0还没有更新整个系统的tick数时,这时CPU1来获取时间,按照基本原理的计算之后还要加上一个tick的时间才是正确的。

4.代码展示

程序清单 4-1

VOID bspTickHighResolution (struct timespec *ptv)

{

REGISTER UINT32 uiCntCur, uiDone;

 

uiCntCur = (UINT32)timerGetCnt(4);

uiDone = GuiFullCnt - uiCntCur;

 

/*

*检查是否有 TICK中断请求

*/

if (rSRCPND & BIT_TIMER4) {

/*

*这里由于 TICK没有及时更新,所以需要重新获取并且加上一个 TICK的时间

*/

uiCntCur = (UINT32)timerGetCnt(4);

uiDone = GuiFullCnt - uiCntCur;

 

if (uiCntCur != 0) {

uiDone += GuiFullCnt;

}

}

 

ptv->tv_nsec += (LONG)((Gui64NSecPerCnt7 * uiDone) >> 7);

if (ptv->tv_nsec >= 1000000000) {

ptv->tv_nsec -= 1000000000;

ptv->tv_sec++;

}

}

  • GuiFullCnt表示递减计数器的初始值,也就是产生1tick时间的计数值;Gui64NSecPerCnt7表示递减一次的时间,但是这个时间被扩大了128倍,目的是为了提高计算精度

  • uiDone表示获取时间时刻计数器已经递减的次数,uiCntCur表示获取时间时刻计数器当前值

  • if (rSRCPND & BIT_TIMER4)用于特殊情况的判断,条件成立表示系统的tick数还没来得及更新,不成立表示系统的tick数已经被更新

  • uiCntCur=0时,表示tick中断刚刚产生,这时uiDone就已经代表一个tick的计数值,所以就无需再加上一个tick的计数值了

  • 最后将修正后的时间赋值给tv_nsec成员

相关内容

热门资讯

ICC逮捕令致内塔尼亚胡出行受... 【环球网报道】据以色列《新消息报》网站26日报道,由于国际刑事法院(ICC)2024年就以色列在巴勒...
“罗永浩怒斥电视机厂商”戳中了... 7月25日晚,罗永浩发文怒斥当下电视机的产品设计。据都市快报报道,罗永浩表示,他为家中老人换了两次电...
各地各部门坚持人民至上筑牢防汛... 新华社北京7月25日电 题:风雨同舟映初心——各地各部门坚持人民至上筑牢防汛抗洪坚实堤坝新华社记者当...
法院回应LV起诉地产开发商 7月26日,厦门市湖里区人民法院发布情况通报,网传案情“路易威登公司起诉地产开发商,因楼盘外立面四叶...
携程的问题不仅在于垄断,更在于... 国内平台科技企业一般都是通过向B端收费、抽佣获利,尽量给消费者创造一个比较清爽的使用环境。携程算是最...
海信电视用遥控器关闭后打不开 原因可能是遥控器的电池没有装好或者是没电了,需要重新安装一下电池或者更换新的电池试一试;原因可能是电...
电视机突然没电源打不开了 有可能是电视开关的电源线断了;可能是电视在使用时短路;可能是电源插头插座松动;可能是电视内部零件接触...
电热水器下面那个小龙头漏水是怎... 电热水器下面那个小龙头漏水是怎么回事?1、因为安全阀发生了故障或者是已经被损坏了,就会有漏水的现象;...
回答下电脑桌面一片空白怎么恢复 电脑桌面上如果是一片空白,那说明您的电脑图标被隐藏了,想要恢复就要按照如下的三个步骤去操作才行。 第...
澳总理要找特朗普“理论”关税:... 当地时间7月26日,澳大利亚总理阿尔巴尼斯表示,他将直接向美国总统特朗普提出抗议,反对美国新近宣布的...