我有一辆Beaglebone在运行Ubuntu。我们希望以100 DSP /s的速度从3个车载ATD转换器中连续采样,每一个样本窗口都会运行一个互相关DSP算法。一旦我们找到高于阈值的相关值,我们就会将该值发送到PC。
我关心的是Ubuntu中的进程调度。如果在这段时间内,我们的流程被替换掉,ATD示例也可用,则该过程将丢失该示例。我们需要确保我们的过程将捕获每个样本并将其保存在内存中。
这么说,是否有办法触发Beaglebone上的中断,以便如果ATD样本已经准备好,即使程序当时没有处理器,样例也会保存在我们程序的内存中。
谢谢!
发布于 2013-03-04 02:32:32
您可能会触发EDMA或使用PRUSS。最好在beagleboard@googlegroups.com上问一问。BeagleBone上没有数字信号处理器.
发布于 2013-03-04 03:20:11
这并不完全是你的问题的答案,但希望它能解释这个过程是如何工作的。由于您没有提到您正在运行的用于AD转换的硬件,也许这是最好的方法:
对于面临同样问题的音频硬件,解决方案来自硬件和驱动程序协同工作:每当硬件填满足够的缓冲区时,它就向驱动程序发出信号(通过中断或类似的机制)。在某些情况下,驱动程序也可能会轮询硬件或诸如此类的东西,但这是一个效率较低的解决方案,我不确定是否有人会这样做(也许是在更便宜的硬件上?)。在那里,驱动程序进程可以直接调用到最终用户进程,也可以简单地将相关的最终用户进程标记为"runnable“。无论哪种方式,控制都需要转移到最终用户进程。
要做到这一点,最终用户进程必须比其他占用CPU的进程具有更高的优先级。为了保证您的进程始终处于队列的第一位,您可以以较高的优先级运行它,具有适当的权限,甚至可以以非常高的优先级运行。
从可运行到运行的最高优先级进程所需的时间有时被称为操作系统的“延迟”,尽管我确信还有一个更具体的技术术语。Linux的延迟约为1ms,但由于它不是一个“硬”实时操作系统,所以这并不是一个保证。如果这段时间太长,无法处理大量数据,则可能需要在驱动程序中缓冲其中的一些数据。
https://stackoverflow.com/questions/15189932
复制相似问题