- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 C++ library (easyBlack)通过/dev/mem 处理 GPIO。
正如我在《AM335x SitaraTM Processors - Technical Reference Manual》的“25.3.3 Interrupt Features”一章看到的
为了在 GPIO 引脚上发生定义的事件(电平或逻辑转换)时向主机处理器生成中断请求,必须按如下方式对 GPIO 配置寄存器进行编程:
• 必须在 GPIO_IRQSTATUS_SET_0 和/或 GPIO_IRQSTATUS_SET_1 寄存器中启用 GPIO channel 的中断。
• 必须在 GPIO_LEVELDETECT0、GPIO_LEVELDETECT1、GPIO_RISINGDETECT 和 GPIO_FALLINGDETECT 寄存器中选择输入 GPIO 上触发中断请求的预期事件。
到此为止一切正常,但我能找到的所有文档都是基于使用 linux 内核头文件(“linux/gpio.h”和“linux/interrupt.h”),而且似乎不能用于用户空间程序,仅在模块中。或者 examples使用内核驱动程序并监视 sysfs 中的状态文件以实现中断。这可能行得通,但速度很慢并且需要大量资源。
除了使用多线程来查看是否更改所需引脚的值之外,还有其他选择吗? (这个其他库如何 - github.com/jackmitch/libsoc)
也许将 easyBlack 编译为内核模块?
谢谢!
最佳答案
不幸的是,真正的中断不可能进入用户空间。这就是为什么所有与中断相关的代码都写在内核模块或内核本身中的原因。不过通常这是可以的。 ISR 应设计得尽可能快,并将实际处理安排在以后的时间。这类似于您上面提到的 sysfs 中的状态文件。然而,对于您来说,easyBlack 库似乎支持将 GPIO 内存空间映射到用户空间,然后允许您轮询引脚的状态。显示的示例将非常处理密集,因为主 while 循环中没有休眠。这意味着该进程将占用调度程序允许的尽可能多的 CPU 时间。
由于 Beaglebone 运行的是嵌入式 Linux 内核,我假设已经编写了一个 libGPIO 驱动程序来支持 GPIO。 LibGPIO 是 linux 内核中的一个框架,它抽象出不同 GPIO 设备的一些细节,并提供一个标准接口(interface)。尝试查看目录 /sys/class/gpio
。这应该为您提供 GPIO 或 GPIO 芯片的列表。
这是 GPIOsysfs 文档 https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
您的用户空间软件可以打开相应 GPIO 的“值”文件,并且可以对该文件描述符使用“轮询”功能。这将允许您的软件阻塞,直到 GPIO 发生变化,然后采取相应行动,从而为您提供用户空间中的伪中断功能。
关于c++ - BeagleBone Black 从用户空间获取中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26841530/
尝试将 MPU6050 连接到在 Beaglebone-IO 下运行 Debian、Node.js 和 Johnny-Five 的 Beaglebone Black。 使用 Johnny-Five 示
我有一个 RFID 模块连接到我的 beaglebone 并使用 python 代码读取 ID 标签。现在,我希望我的 python 代码在没有任何命令的情况下登录我的 beaglebone 时直接在
在 beagleboard 或 beaglebone 中,引脚有不同的工作模式。对于以前的内核,它们位于/sys/kernel/debug/omap_mux 中。你知道最后一个内核中那些文件在哪里吗?
我听说可以直接在 Beaglebone black 上进行开发和调试。我是做Java的。目前我必须生成 jar 并复制到开发板然后运行。但这样我就无法调试和单步执行代码。在本地调试也没有什么意义,因为
提前致谢。我正在尝试在 Texas Instrument 制造的 beaglebone black (BBB) 上播放视频。由于有很多关于使用 ffmpeg 和 SDL 的好教程,我决定使用它。获取有
我是 beaglebone 的新手,我需要一些帮助来解决我面临的一些问题。 我用 c 编写了一段代码(在装有 ubuntu 的笔记本电脑上运行),其中打开了一个服务器套接字(运行一个 apache 服
我是 beaglebone 的新生。我需要你的帮助。我已经在 Eclipse 中的 64 位 xubuntu 以及 codeblocks 环境中安装了交叉编译器工具链 arm-linux-gnueab
我正在尝试遵循发现的演练/教程 here . 我正在运行内核版本 4.1.1-ti-r2,该版本的 rcn-ee.net/deb/trusty-armhf 文件夹中似乎没有任何头文件。这意味着我无法迈
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在读取 beaglebone gpio 引脚中的霍尔传感器输出,对于中断服务例程需要执行的每个上升沿。那么,如何在 beaglebone 中使用外部中断呢?是否有用于此目的的标准驱动程序? 谢谢。
当我使用如下以太网电缆将其插入新网络时,我需要知道如何使用 SSH 连接到 beaglebone(或 beagleboard): $ ssh root@beaglebone.local 到目前
我昨天买了 beaglebone black 并尝试使用 USB 连接它。正如我所读到的那样,它预装了运行在 192.168.7.2 的 Linux Distro,我们可以使用 ssh 访问它。但我无
我们目前正在为 BeagleBone Black 开发一个应用程序(使用标准的 Angstrom 发行版)。它在 GDB(由 Netbeans 远程控制)下运行了一段时间(5-10 分钟),但在某个相
在 C++ 中进行串行操作似乎很痛苦,此外,在 Beaglebone Black 上进行操作也很困难,所以我需要有一些专业知识的人! 我使用以下命令创建了/dev/ttyO4: echo BB-UAR
我正在通过串行端口(ttyO2)连接 BBB 和一组 arduino。我有一个数组要从 BBB 发送到一组 arduino。我需要让 BBB 发送请求并等待其中一个 arduino 的回复,但如果在一
美好的一天, 我想弄清楚如何在 openCV 的 beaglebone 上关闭相机。我已经尝试了很多命令,例如 release(&camera),但都不存在,而且当我不希望它打开时,相机会继续保持打开
我需要直接从 Python 代码 关闭 Beaglebone black,而不使用任何 gpio 按钮或任何硬件干预。 有命令行 shutdown -h now 但此命令不适用于 python 代码,
我的知识:我的 Linux 知识还处于初级阶段,所以如果我做了一些愚蠢的事情,请纠正我,或者给我你的意见。 我的问题:我想以相同的方式配置一堆单板计算机(Raspberry Pi/BeagleBone
为了通过 USB 从我的 ubuntu 主机获取互联网,我更改了 beaglebone 上的路由 route add default gw 192.168.7.1 并将/etc/resolv.conf
我需要在机器人上执行一组命令,机器人已经连接了Mini-ITX PC,但速度很慢,而且实时结果不理想。 我想使用外部 BeagleBone 作为处理单元,但如何配置设置以在 BeagleBone 上处
我是一名优秀的程序员,十分优秀!