4

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

我关心的是 Ubuntu 中的进程调度。如果我们的进程被换出并且在此期间 ATD 样本可用,则该进程将丢失该样本。我们需要确保我们的进程将捕获每个样本并将其保存在内存中。

话虽如此,有没有办法在 Beaglebone 上触发中断,这样如果 ATD 样本准备好,即使程序当时没有处理器,样本也会保存在我们程序的内存中?

谢谢!

4

2 回答 2

0

您可能能够触发 EDMA 或使用 PRUSS。最好在 beagleboard@googlegroups.com 上询问。BeagleBone 本身没有 DSP。

于 2013-03-04T02:32:32.090 回答
0

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

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

为此,最终用户进程必须以比当时占用 CPU 的任何其他进程更高的优先级运行。为了保证您的进程始终排在队列的首位,您可以以高优先级运行它,在适当的权限下,您甚至可以以非常高的优先级运行。

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

于 2013-03-04T03:20:11.900 回答