首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IIO :如何知道缓冲区何时已满?

IIO :如何知道缓冲区何时已满?
EN

Stack Overflow用户
提问于 2016-11-14 13:35:26
回答 2查看 1.9K关注 1票数 4

我使用用户空间的IIO驱动程序读取ADC (AD7924)的值。我有所有步骤让触发的获取正常工作(创建触发器、分配触发器、启用ADC通道、设置缓冲区的维度并启用它)。以下是此代码:

代码语言:javascript
复制
// 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 0上使用轮询或select函数来检查文件描述符中的更改,但我只能知道收购何时开始(通过检查POLLIN )。

EN

回答 2

Stack Overflow用户

发布于 2016-12-22 16:15:54

对于那些可能有所帮助的人,我最终使用了缓冲区文件的递归非阻塞读取来读取获取过程中的措施。这样,当我阅读了预期的样本数,程序可以安全地处理它们。

此外,禁用缓冲区类等待获取以完成系统似乎可以执行另一个命令:

代码语言:javascript
复制
     system("echo 0 > /sys/bus/iio/devices/iio:device0/buffer/enable");

第二个解决方案更多的是一种轮询方法。

票数 0
EN

Stack Overflow用户

发布于 2018-08-06 11:12:09

好吧,首先,这样的方法是没有规模的。如果另一个IIO设备被添加到您的系统中,并且设备ID发生了更改,怎么办?我建议使用libiio

关于您的问题,即,我如何知道缓冲区何时已完全填满?。这可能取决于您使用的缓冲区大小和设备的特性。例如,ADC转换器可能以比温度计更高的速率提供样品,更不用说更专业的设备了。

我从未使用过它,但是libiio中有libiio函数。退房:Buffer.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40590024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档