Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 结合RT-PREEMPT内核使用BCM2835_Linux_Real Time_Raspbian_Preempt Rt - Fatal编程技术网

Linux 结合RT-PREEMPT内核使用BCM2835

Linux 结合RT-PREEMPT内核使用BCM2835,linux,real-time,raspbian,preempt-rt,Linux,Real Time,Raspbian,Preempt Rt,我正在做一个项目,从天线发出40khz信号。 我发现信号不太准确,所以我决定尝试一个实时内核 我用我的覆盆子皮2B跑了Raspbian Jessie。 干净安装后,脚本运行没有任何问题。 bcm2835_延迟微秒可以运行 我按照本教程编译并安装了RT内核。 但是,脚本无法再成功运行。 在显示“高睡眠”后,它被举起 这是代码片段: fprintf(stdout , "HIGH\n"); bcm2835_gpio_write(PIN, HIGH); fprintf(stdout , "SLEEP\n

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

我用我的覆盆子皮2B跑了Raspbian Jessie。 干净安装后,脚本运行没有任何问题。 bcm2835_延迟微秒可以运行

我按照本教程编译并安装了RT内核。 但是,脚本无法再成功运行。 在显示“高睡眠”后,它被举起

这是代码片段:

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);

编译内核时是否遗漏了任何内容?

要使用抢占,您只需:

  • 检索当前内核的配置
  • 检索内核源代码
  • 使用抢占补丁修补内核源(或获取已修补的内核)
  • 将新内核配置为当前内核(即,使用
    makeoldconfig
  • 在内核配置中启用完全可抢占性(例如,通过运行
    makemenuconfig
  • 以标准方式编译内核
  • 安装新内核
因此,不需要采取特别行动

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


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

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

你能试着编写一个只做延迟微秒的程序并调试它吗?这里有其他人报告了几乎相同的问题(但它自己就消失了):@JohnZwinck我不熟悉C。如何调试它?是否有运行时错误的错误日志?谢谢。#include#include#include#include#define PIN RPI(u V2)GPIO(u P1)int main(int argc,char*argv[]{fprintf(stdout,START\n);if(bcm2835)init<0{fprintf(stderr)无法初始化bcm2835\n)}fprintf((stdout,stdout,HIGH\n);bcm2835bcm2835延迟微秒(12);fprintf(stdout,“LOW\n”);bcm2835 gpio写入(PIN,LOW);fprintf(stdout,“SLEEP\n”);bcm2835延迟微秒(12);fprintf(stdout,“END\n”)}我刚刚写了一个小脚本,在第一次“睡眠”之后它就停止了…很抱歉,我忘了发布我所指教程的链接。这是链接,请执行与“make oldconfig”相同的步骤“make menuconfig zcat config.gz>.config”?谢谢你的回答。