Linux 结合RT-PREEMPT内核使用BCM2835
我正在做一个项目,从天线发出40khz信号。 我发现信号不太准确,所以我决定尝试一个实时内核 我用我的覆盆子皮2B跑了Raspbian Jessie。 干净安装后,脚本运行没有任何问题。 bcm2835_延迟微秒可以运行 我按照本教程编译并安装了RT内核。 但是,脚本无法再成功运行。 在显示“高睡眠”后,它被举起 这是代码片段: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
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
- 以标准方式编译内核
- 安装新内核
从您的具体错误来看,新内核的配置似乎与当前内核不同(例如,未启用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”?谢谢你的回答。