一、SWC获取全局时间
本地时间T1
全局时间T2
当正常收到全局时间T2时,会记录收到全局时间T2时的本地时间T1。
假设收到的全局时间是12345,本地时间是1000,那么1000就相当于是全局的12345。
StbM_MainFunction的周期是100ms,同步报文的周期是1000ms。
1、SWC调用StbM_GetCurrentTime获取全局时间。
2、StbM获取当前的本地时间戳,因为SWC是随机获取的,所以肯定不是和StbM_MainFunction同周期
的,假设这个时候本地时间是1156ms,全局时间还没有下次同步,所以还是12345ms。
3、StbM获取上次同步的全局时间戳,也就是12345ms,然后计算本地时间戳与上次StbM_MainFunction更
新的本地时间的差值,也就是1156-1100 = 56ms。
4、计算全局时间,也就是拿StbM维护的本地时间(1100 - 1000) + 56 得到上次全局时间同步的差值,也
就是当前的时间相对于上次同步的时间差,得到全局时间就是12345+100+56
二、SWC获取StbM的状态
可以配置这个回调函数以及对应的mask,这样在发生我们想要的状态转换时,就会自动调用回调函数。
bit0 :STBM_EV_GLOBAL_TIME_BASE 在第一次发生时间同步的时候会置位
bit1:STBM_EV_TIMEOUT_OCCURED 如果在时间同步后发生了时间同步报文超时,该位置1
bit2:STBM_EV_TIMEOUT_REMOVED 在接收到时间同步报文恢复后会置位,并且清除bit1
bit3: STBM_EV_TIMELEAP_FUTURE 在接收到时间同步报文恢复后会置位