识别posix读取暂停在微秒范围内

Recognizing POSIX-read pauses in microseconds range

本文关键字:范围内 暂停 posix 读取 识别      更新时间:2023-10-16

我必须在c++/Linux中实现j1708协议。我想完全在用户空间中实现它,但我不知道这是否可能。

问题是消息只是通过位时间分开的。比特时间对应波特率:1/baudrate,在J1708上,波特率为9600bps,大约104.17微秒。该协议上的每条消息都由2比特时间(208.34us)分隔的字符组成,即所谓的"字符间比特时间"。如果有10位(1041.7us)的暂停,则消息由数目不定的字符组成,即结束/完成。

我的想法是以阻塞模式通过POSIX终端接口读取字节,并计算间隔时间以识别消息的结束。我的方法是否有可能实现这一点,或者有人有更好的主意吗?

SAE J1708参考:http://read.pudn.com/downloads133/ebook/567787/saej1708v002.pdf

这非常依赖于硬件!你能保证:

  • 您的UART未处于FIFO模式。如果是,那么几个字符将被缓冲

  • 没有其他任务(用户空间或内核)将中断您的读取并持续超过1毫秒?

  • 每个字符将导致不同的读取事件?它类似于第一个假设(没有硬件FIFO),但在驱动端。

考虑到波特率较慢,也许你可以实现1和3。

我认为在linux这样的操作系统上实现这一点要么是不可能的,要么是非常低效的(即你把所有的处理时间都花在轮询硬件上)。

这种"协议"最好由FPGA或微控制器处理。通过pic演示板,解码pic板上的消息,并将它们发送到linux处理器。