poll()在树莓gpio(sysfs)覆盆子

poll()在树莓gpio(sysfs)覆盆子,第1张

概述poll()在树莓gpio(sysfs)覆盆子

作为标题状态,我有一个问题,从另一个armv7embedded式linux平台移植一些用户空间中断代码到树莓派2模型B.

我知道wiringpi库(并得到它的工作方式),但出于评估的原因,我想在两个平台上运行尽可能相同的代码。 出于这个原因,我必须手动与sysfs进行交互。

所以,这里是相关的代码片段

#define GPIO_TRIGGER_MODE "rising" #define SYS_GPIO_PIN "2" #define SYS_GPIO_DIRECTION "/sys/class/gpio/gpio2/direction" #define SYS_GPIO_EDGE "/sys/class/gpio/gpio2/edge" #define SYS_GPIO_VALUE "/sys/class/gpio/gpio2/value" static int fd_gpio; {...} //Setup sysfs-Pin if ((fd_gpio = open("/sys/class/gpio/export",O_WRONLY)) < 0) { exit(-1); } else { write(fd_gpio,SYS_GPIO_PIN,strlen((char*) SYS_GPIO_PIN)); close(fd_gpio); if ((fd_gpio = open(SYS_GPIO_DIRECTION,"in",strlen("in")); close(fd_gpio); if ((fd_gpio = open(SYS_GPIO_EDGE,GPIO_TRIGGER_MODE,strlen((char*) GPIO_TRIGGER_MODE)); close(fd_gpio); } } } static int fd_gpio_value; struct pollfd *fd_poll; if ((fd_gpio_value = open(SYS_GPIO_VALUE,O_RDWR)) < 0) { exit(-1); } else { fd_poll = malloc(sizeof (*fd_poll)); fd_poll->fd = fd_gpio_value; fd_poll->events = PolLPRI; char buf; while (1) { read(fd_gpio_value,&buf,1); if (poll(fd_poll,1,-1) == -1) { exit(-1); } else { some_logging_occurs(); } }

所以,什么工作是针的设置:(猫/ sys /类/ gpio / gpio2 / $东西回声正确的设置)。 只要没有触发器,程序就会正确地等待(在poll()上)。

如何获得一个文件夹中的所有文件及其子文件夹的名称和pathstring数组在c + +?

如何find含有X的窗口的PID

如何比较c中的两个结构?

将非BMP代码点写入控制台

有没有办法检测windows和linux在C + +的文件名编码?

在第一个上升沿之后,poll()总是立即返回,从而每次都执行我的日志loggingfunction,而不仅仅是在上升沿。

让我感到困惑的是,完全相同的代码完全按照其他平台上的预期工作,并且与GPIO具有相同的接口。

修改旧的windows程序不能在没有源代码访问的情况下通过按键调用exit

链接到没有libsfml-dev的SFML库

为什么在Win32中使用`GetAsyncKeyState()`时,我的热键会出错?

GCC共享库问题

使用QTextEdit检测用户input(并将其与应用程序更改区分开来)

终于找到了答案:简单

lseek(fd_gpio_value,SEEK_SET);

在read()之前失踪

总结

以上是内存溢出为你收集整理的poll()在树莓gpio(sysfs)覆盆子全部内容,希望文章能够帮你解决poll()在树莓gpio(sysfs)覆盆子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1291031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存