识别posix读取暂停在微秒范围内
Recognizing POSIX-read pauses in microseconds range
我必须在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处理器。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 查找给定范围内最长连续 1 的频率
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- 识别posix读取暂停在微秒范围内