我正在尝试编写一个通过类驱动程序读取GPIO的程序。我已将GPIO22设置为输入,将慢速振荡器连接到GPIO22,并且正在读取值文件。它始终为0,在期间内没有任何变化。如果我幸运地开始了一个好时机,它会显示为1。因此,这可能不是驱动程序问题。关闭有价文件然后再次打开它会产生很好的效果,但是很慢。
FILE *fd_gpio;
void errExit(char *msg) {
perror(msg);
exit(1);
}
void open_gpio(void) {
fd_gpio = fopen("/sys/class/gpio/gpio22/value", "rw");
if (fd_gpio == NULL) {
if (system("echo '22' > /sys/class/gpio/export") == -1)
errExit("GPIO22 handler creation");
fd_gpio = fopen("/sys/class/gpio/gpio22/value", "rw");
}
system("echo 'in' > /sys/class/gpio/gpio22/direction");
system("echo 'both' > /sys/class/gpio/gpio22/edge");
sleep(1);
}
void close_gpio(void) {
fclose(fd_gpio);
}
int main(int argc, char **argv) {
int i;
char value;
open_gpio();
for(i = 0; i < 10000000; i++) {
rewind(fd_gpio);
value = fgetc(fd_gpio);
if (value != 48) printf("%i\n", value); }
close_gpio();
return 0;
}