Linux Driver实时约束

时间:2013-01-24 10:56:11

标签: linux-kernel real-time linux-device-driver timing raspberry-pi

我需要构建一个记录某些传感器数据的平台。以后可能会对这些记录的数据进行一些计算。

Raspberry Pi看起来像是一个有趣(又便宜!)的设备。

我的陀螺仪可以800 Hz采样,相当于每1.25 ms采样一次。 陀螺仪具有内置FIFO,可存储32个样本。 这意味着FIFO必须至少每隔32 * 1.25 = 40 ms清空一次,否则样本将被丢弃。

所以我的问题是:我可以100%确定我的内核驱动程序能够在指定时间内从此FIFO中提取数据吗?

陀螺仪通过i2c与主机通信,并且它还可以在“几乎完整”的事件上触发中断引脚,如果这会使事情变得更简单。 但如果我可以在驱动程序中定期检索数据,那么这将是最简单的。

我可以将数据存储在内核空间中,并且不经常将其移动到用户空间(没有时间约束)。

我也可以在较低的采样率下采样陀螺仪(可接受400或200 Hz)。

这是关于stock内核,而不是特殊的实时内核,因为Raspberry Pi目前似乎不支持这种内核。

1 个答案:

答案 0 :(得分:2)

您需要一个实时的Linux环境来实现紧凑的时间:

您可以在Raspberry Pi上尝试Xenomai: http://diy.powet.eu/2012/07/25/raspberry-pi-xenomai/

但是,请关注此博客: http://linuxcnc.mah.priv.at/rpi/rpi-rtperf.html(已死了,我无法在其中找到它或谷歌缓存)

似乎他正在从库存内核中获得可重复的+/-20μS时序。如果您愿意在蓝色月亮YMMV中丢失一次样品,那么当您的定时分辨率为1250μS时,您可以使用库存内核。

我自己还没有对此进行过测试,但我一直在试图尝试用Raspberry Pi驱动ws2811 LED控制器,这看起来对我来说是最有希望的。

还有RT linux补丁:https://rt.wiki.kernel.org/index.php/Main_Page
至少有一个pi版本:https://github.com/licaon-kter/raspi-rt
然而,当我更深入地研究这个补丁时,我遇到了许多反对者。

如果您错过了一个间隔,那么最好打赌它可以读取MS定时器并记录或点亮LED,然后尝试一些解决方案。快乐黑客..