2013-03-03 41 views
4

我有一个运行Ubuntu的Beaglebone。我们希望以100KS/s的速率连续从3个板载ATD转换器采样,并且每个采样窗口都将运行互相关DSP算法。一旦我们发现相关值超过阈值,我们会将该值发送给PC。Beaglebone上的DSP

我担心的是Ubuntu中的进程调度问题。如果我们的流程被换出并且ATD样本在此期间变得可用,则该流程将错过样本。我们需要确保我们的流程捕获每个样本并将其保存在内存中。

说到这里,有没有办法触发Beaglebone上的中断,这样如果ATD样本准备好了,即使程序中没有处理器,样本也会保存在我们的程序的内存中时间

谢谢!

回答

0

您可能能够触发EDMA或使用PRUSS。可能最好在[email protected]ooglegroups.com上提问。 BeagleBone上没有DSP。

0

这不完全是您的问题的答案,但希望它解释了过程如何工作。由于您没有提到您正在运行AD转换的硬件,所以也许这是最好的做法:

由于音频硬件面临同样的问题,因此解决方案来自硬件和驱动程序一起工作:每当硬件装满足够的缓冲区时,它就会通知驱动程序(通过中断或类似的机制)。在某些情况下,驱动程序也可能轮询硬件或类似的东西,但这是一个效率较低的解决方案,我不确定有人会这样做(也许在便宜的硬件上?)。从那里,驱动程序进程可以直接调用到最终用户进程中,或者可以简单地将相关最终用户进程标记为“可运行”。无论哪种方式,都需要将控制权转移给最终用户流程。

要发生这种情况,最终用户进程必须以比当时占用CPU的任何其他优先级更高的优先级运行。为了保证您的流程始终处于队列中的第一位,您可以使用适当的权限以高优先级运行它,甚至可以以非常高的优先级运行它。

最高优先级进程从runnable运行到运行所需的时间有时称为操作系统的“延迟”,尽管我确信有更具体的技术术语。 Linux的延迟大约为1毫秒,但由于它不是一个“硬”实时操作系统,这不是保证。如果这太长以至于无法处理您的数据块,您可能需要在驱动程序中缓冲一些数据。