K64上面IEEE1588时间戳分为接收时间戳、发送时间戳。
- 接收时间戳全部都有,硬件自动为每个接收到的报文记录时间戳。
- 发送时间戳需要设置标志位才有,发送前设置一个记录时间戳的标志位,发送完成后,就可以读取到时间戳。
开始时操作网络接口使用的官方代码,现在出于性能优化的目的,优化时间戳部分的相关内容,官方实现的方式是这样:
- 接收到报文后,判断是否是PTP报文,如果是,则将接收的时间戳,连同PTP报文的标识记录到环形缓冲区中。
- 应用程序判断是否是PTP报文,然后从缓冲区中读取时间戳。
- 发送报文时,数据包发送函数中判断是否是PTP报文,如果是,则设置时间戳标志。
- 应用程序随后获取发送的时间戳。
优化的内容:
- 接收函数中将时间戳交给应用程序统一处理。
- 发送时,应用程序设置好是否获取时间戳的标志,发送函数只负责执行。