【问题标题】:Linux Driver real time constraintsLinux 驱动程序实时约束
【发布时间】:2013-01-24 10:56:10
【问题描述】:

我需要建立一个平台来记录一些传感器数据。并且可能稍后对这些记录的数据进行一些计算。

Raspberry Pi 似乎是一个有趣(而且便宜!)的设备。

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

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

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

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

我也可以忍受以较低的采样率对陀螺仪进行采样(400 或 200 Hz 是可以接受的)。

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

【问题讨论】:

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


    【解决方案1】:

    你需要一个实时的 linux 环境来保证时间紧迫:

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

    但是,请关注此博客: http://linuxcnc.mah.priv.at/rpi/rpi-rtperf.html(死了,我在 Wayback 或 google 缓存中找不到)

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

    我自己还没有测试过这个,但我一直在阅读,试图尝试用 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,然后尝试一些解决方案。快乐黑客..

    【讨论】:

    • 博客链接不起作用 :( 是的,我知道我不能保证硬计时,但我真的只需要知道我的代码可以大约每 10-20 毫秒运行一次并流式传输来自设备的数据。
    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多