poll () gibt beide zurück, POLLPRI & POLLERR

Ich fing an, mit Linux und eingebetteten Systemen (Router-Hardware und openwrt) in die C-Programmierung einzusteigen. Ich habe Unterbrechungen für GPIOs aktiviert, die mit Umfragen arbeiten ... fast.

Ich kann poll () verwenden und wenn ich die Taste drücke, um den Interrupt auszulösen, wird poll () mit einem Wert> 0 zurückgegeben. So weit so gut. Jetzt versuche ich poll () auf mehreren GPIOs gleichzeitig zu verwenden und möchte daher die Ereignisse jeder möglichen Interruptquelle analysieren. Obwohl der Interrupt zu funktionieren scheint, bekomme ich POLLPRI & POLLERR zurück und ich verstehe nicht warum. Das Reduzieren der pollfd-Struktur auf 1 Eintrag ändert nichts.

char value;

int fd_btn1 = open("/sys/class/gpio/gpio14/value", O_RDONLY);
int fd_left = open("/sys/class/gpio/gpio12/value", O_RDONLY);
int fd_right = open("/sys/class/gpio/gpio13/value", O_RDONLY);

struct pollfd fds[3];
fds[0].fd = fd_btn1;
fds[1].fd = fd_left;
fds[2].fd = fd_right;
fds[0].events = POLLPRI;
fds[1].events = POLLPRI;
fds[2].events = POLLPRI;

read(fd_btn1, &value, 1);
read(fd_left, &value, 1);
read(fd_right, &value, 1);

ret = poll(fds, 1, 10000);
//debugging purpose
printf("ret: %i - revents[0]: %i", ret, fds[0].revents);

Falls die Taste gedrückt wurde (Interrupt ausgelöst): ret = 1d, revents = 10d

Wenn nichts gedrückt wurde, ist beides 0d

Antworten auf die Frage(2)

Ihre Antwort auf die Frage