我在 Cyclone 5 上有一个交流程序,它使用连接的 FPGA 进行 FFT。该程序当前从 中获取 256 个字节stdin
,然后对其进行处理,给出 FFT 结果stdout
。我在 Cyclone 5 上的 Linux bash 中像这样运行它。
./fpga_fft < input_s16le_audio.pcm
这仅评估前 256 个字节。我该如何执行此操作,以便使用标准输入流连续调用程序,直到读取 *.pcm 文件中的所有内容?
想法:
cat input_s16le_audio.pcm|xargs ./fpga_fft
不知何故,需要告诉 xargs 按时间顺序(而不是并行)一次处理 256 个字节。
答案1
像这样的东西:
for i in {0..N}
do
dd if=input_s16le_audio.pcm bs=256 count=1 skip=$i | ./fpga_fft
done
显然,您必须将 for 循环替换为在处理整个文件时停止的循环(当跳过值太大时,dd 仅发送 0 字节,因此您不能指望错误的 rc)。
现在,如果您有一个 C 程序,那么更改它以使其在输入文件上循环应该很困难吧?
答案2
使用 GNU 并行:
cat input_s16le_audio.pcm |
parallel --pipe --recend '' --block 256 ./fpga_fft
如果多个fpga_fft
无法并行运行,请添加-j0