有个和硬件通讯的程序需要同时向两个端口输出数据,本打算用软件实现,但是由于同步的精度要求实在太高,必须是纳秒级别的同步,所以最终采用了硬件实现的方法。

项目完成以后,突然想利用这个系统测试一下线程同步的精度到底有多高。经过测试,发现软件的线程同步只能达到毫秒级,连微秒级都不能达到。当然精度对于一般的软件项目来说已经十分足够了,但是对于我们这样的高精度项目就只能依靠硬件来实现了。

为了更准确的说明线程同步的精度,把不同执行情况下的程序的输出如图的形式提供给大家看看:

图1:采用100ms的分辨率观察同步波形的时候,认为线程输出的两通道数据是同步的

 

事实上用更小的分辨率,比如50ms,也很难看出他们之间的差异,但是将分辨率调高到1ms的分辨率的时候,可以很清楚的看到,输出的数据有了先后,不过还可以,因为通过优化程序,县城的同步精度可以达到1.5ms左右。如图2所示

 

图3是通过硬件同步后的输出波形,即使将分辨率设置到50us的情况下,同步精度也是可以保证的。事实上,同步精度理论上可以达到ns级

btw:红色是修改后增加的内容