linux - IIO Linux : How to know when the buffer is full?

标签 linux sysfs iio

我正在使用来自用户空间的 IIO 驱动程序来读取 ADC (AD7924) 的值。 我已经完成了触发采集工作的所有步骤(创建触发器、分配它、启用 ADC channel 、设置缓冲区的大小并启用它)。这是此代码:

// Create IIO trigger
system("echo 0 > /sys/devices/iio_sysfs_trigger/add_trigger");

// Assign IIO trigger "sysfstrig0" to IIO AD7923 driver
system("echo sysfstrig0 > /sys/bus/iio/devices/iio:device0/trigger/current_trigger");

// Enable scan of the first 3 channels for AD7924
system("echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage0_en");
system("echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage1_en");
system("echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage2_en");
system("echo 0 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage3_en");

// Dim IIO buffer and enable it
sprintf(CommandeADC, "echo %d > /sys/bus/iio/devices/iio:device0/buffer/length", NB_ECH);
system(CommandeADC);
system("echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable");
//Launch acquisition...
system("echo 1 > /sys/bus/iio/devices/trigger0/trigger_now");

这样配置的系统将处理采集,并填充完整的缓冲区。一旦它已满,采集就会停止。

我的问题是:我如何知道缓冲区何时已满?我尝试在位于 /dev/ 的文件 iio:device0 上使用 poll 或 select 函数来检查文件描述符的变化,但我只能知道何时获取开始(通过检查 POLLIN 事件)。

最佳答案

它可能对谁有帮助,我最终使用缓冲文件的递归非阻塞读取来在采集过程中读取测量值。这样,当我读取了预期数量的样本后,程序就可以安全地处理它们。

此外,似乎禁用缓冲区会等待采集完成,然后系统才能继续执行另一个命令:

     system("echo 0 > /sys/bus/iio/devices/iio:device0/buffer/enable");

第二种解决方案更像是一种轮询方法。

关于linux - IIO Linux : How to know when the buffer is full?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40590024/

相关文章:

python - 有什么简单的方法可以使 python raw_input UI 更像 bash UI 吗?

linux - 在 linux 中不使用 shell 更改目录?

c++ - 当轮廓上的第一个点偏离曲线时如何解释自由字形轮廓

linux - 如何在struct device中取消引用device_private

c - 如何在 Linux 内核模块的 sysfs 上存储数组?

Linux IIO加速度计运动检测事件

linux - *Linux 驱动程序开发* 有没有办法使用 IIO 框架通过 sysfs 公开额外的设置?

linux - IIO(字符)设备输出无输出 - IIO 缓冲区

ruby-on-rails - ‘ bash ’: no such file or directory

Android 通过 sysfs 获取以毫安为单位的充电率