请问各位大佬,目前在做一个项目,需要读取100hz的数据,这个数据是从串口发送过来的,接收数据后需要打上时间戳,但是问题出现在,接受到串口数据之后,时间戳不准确,请问如何解决?
此外,我用minicom接收串口数据,也出现这样的问题,示例内容如下:
如图,数据理论时间戳应为20.303 20.313 20.323 20. 333, 但是实际读取的数据是四个数据一起进来的20.303 20.304 20.305 20.306。
用示波器看过波形,是100hz均匀间隔,请问各位大佬是什么问题呢?
4 个赞
birdfly
(齋藤飛鳥)
5
时间戳是minicom打上的吗?
试一下picocom
如果都不对,使用c O_DIRECT的方式open串口,然后把数据打出来看看
1 个赞
birdfly
(齋藤飛鳥)
7
minicom和picocom操作串口应该都是用的非O_DIRECT的方式,我猜想这样导致数据有一部分缓存,可能会导致这个问题。
birdfly
(齋藤飛鳥)
8
看一下这个博客,如何添加时间戳
然后在这一行,open里面
改为
tty_fd = open(opts.port, O_RDWR | O_NONBLOCK | O_NOCTTY | O_DIRECT);
看一下,打印的会不会变好
1 个赞
有试过楼上说的用picocom打时间戳吗?另外目前这个波特率是定死的吗
EthanOVO
(Ethan)
17
波特率是定死了的,试了一下picocom好像仍然是这个问题
串口发送时虽然底层是按触发器方式处理,但实际读取时是放在一个buf池中。你上位机读的时候可能是直接读buf池那一堆,相当于同个时间点