Я пытаюсь написать программу чтения 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;
}