PTP移植笔记三:PTP定时器

PTP报文的处理函数为:
void processMessage(RunTimeOpts *rtOpts, PtpClock *ptpClock, TimeInternal *timeStamp, unsigned int length)
里面调用的消息处理例程中大量使用了定时器,查看IEEE1588文档,亦有大量定时的功能的描述,这次首先把其中的定时器功能实现出来。

函数的处理流程为:
1.检查报文头,版本号
2.检查地址等
以上各种检查通过后再继续向下执行。
3.根据报文头中的报文类型,调用对应的处理函数。报文共有10种类型,每种类型对应一个处理函数。

报文类型:
ANNOUNCE:
SYNC:
FOLLOW_UP:
DELAY_REP:
DELAY_RESP:
PDELAY_RESP:
PDELAY_RESP_FOLLOW_UP:
MANGEMENT:
SIGNALING:

由于PTP文档中定时器的精度为秒级,所以采用了一种与系统耦合性较低的方法,方便后期维护。如下:
u32_t _now = sys_now();
if (_now - _ptime >= 10)
{
_ptime = _now;
timerISR1MS();
}
主循环中不断获取时间,比较两个时间的值,定时调用定时器的处理函数。
定时器函数如下。
//*********************************
// 初始化所有的PTP定时器。
//*********************************
Boolean PTPtimerSetup(IntervalTimer *itimers);
void timerShutdown(IntervalTimer *itimers);

//*********************************
// 每次调用,各个定时器的剩余时间减1。
//*********************************
void PTPtimerISR1MS();

猜你喜欢

转载自blog.csdn.net/u011226925/article/details/89209757