【发布时间】:2017-07-22 08:26:48
【问题描述】:
我正在使用 linux kernel-2.6.35.3 开发 imx283 平台,并使用所有 3 个 uart 端口进行通信。
我想从 UART-1 收集数据,但需要有准确的间隔。
数据是从传感器收集的。
我需要向传感器发送命令以获取数据。
时间间隔可以从 10 毫秒到 2 秒。
我需要一些关于内核模块的帮助,我可以使用内核计时器并从 uart 收集数据吗?
内核定时器有很好的准确性,所以我是否可以使用它们。
谢谢,
【问题讨论】:
-
不可能,你需要的是 RTOS,而不是 Linux,尤其是古董。
-
"我需要内核模块的帮助" -- 为什么是内核模块?可能已经有一个设备驱动程序处理 UART,因此您应该在用户空间中“从 UART-1 收集数据”。 "...但需要有一个准确的区间" -- 做什么?数据会异步到达,那你想轮询设备还是轮询接收缓冲区呢?仅供参考,现有的 UART 驱动程序肯定使用中断(而不是轮询)来服务 UART。为什么你想要比现有驱动程序更低的性能? OTOH 有特殊情况时首选轮询,但您没有引用任何内容。
-
请解释一下您对 我想从 UART-1 收集数据但需要准确的间隔 的含义,因为这需要一些解释。 RS232 数据传输取决于选择的波特率,这意味着单个 8 位、无奇偶校验、一个停止位在 9600 波特率下使用 1ms。
-
顺便说一句,即使是最奇怪的规范,标准的 tty 驱动程序也足够了,请参阅
termios(4)了解如何使用VMIN和VTIME参数来处理超时和分组数据。 -
@LuisColorado 感谢您的反馈。实际上,根据我的理解,如果我在用户空间中执行此任务,即在 while 循环中使用 usleep(interval) 发送命令和接收数据,它就有机会成为中断为....我还运行 3 个进程和 4 个线程以及这个任务作为 pthread。所以为了让它不间断......我在想是否有可能在内核中这样做并在环形缓冲区中收集数据,因为对于这个任务......我只关心我收集的数据和间隔。跨度>
标签: linux timer linux-kernel kernel uart