作为标题状态,我有一个问题,从另一个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)覆盆子所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)