0

我正在制作一个从天线发出 40khz 信号的项目。我发现信号不太准确,所以我决定尝试实时内核。

我在我的 Raspberry-Pi 2B 上运行 Raspbian Jessie。全新安装后,脚本运行没有任何问题。bcm2835_delayMicroseconds 可以运行。

我按照本教程http://www.frank-durr.de/?p=203编译并安装了 RT 内核。但是,该脚本无法再成功运行。在显示“HIGH SLEEP”后,它被搁置了。

这是代码片段:

fprintf(stdout , "HIGH\n");
bcm2835_gpio_write(PIN, HIGH);
fprintf(stdout , "SLEEP\n");
bcm2835_delayMicroseconds(12);
fprintf(stdout , "LOW\n");
bcm2835_gpio_write(PIN, LOW);
fprintf(stdout , "SLEEP\n");
bcm2835_delayMicroseconds(12);

编译内核时我错过了什么吗?

4

2 回答 2

1

要使用 PREEMPT_RT,您只需:

  • 检索当前内核的配置
  • 检索内核源
  • 使用 PREEMPT_RT 补丁修补内核源代码(或获取已修补的内核)
  • 将新内核配置为当前内核(即使用make oldconfig
  • 在内核配置中启用完全抢占性(例如,通过运行make menuconfig)。
  • 以标准方式编译内核
  • 安装新内核

因此,不需要特别行动。

然后,如果性能仍然不够,您可能需要调整特定 IRQ 线程的优先级。

从您的具体错误来看,似乎新内核的编译配置与当前内核不同(例如,未启用 GPIO)。

于 2015-12-16T11:27:56.840 回答
1

我刚刚看到并记住了这个线程。大约半年前,我想从 Raspberry 中生成 40khz。但最后我发现我使用了错误的工具。我相信 Raspberry 无法处理这样的任务,因为它正在运行一个操作系统。我切换到Arduino,问题立即解决,没有任何问题。为您的任务使用正确的工具非常重要!

于 2016-05-17T05:02:47.983 回答