RaspberryPI GPIOs via poll()

OP #3058921
Lesenswert?

Hallo Gemeinde,

ich rätsel schon seit Tagen an einem Problem.

RaspberryPI GPIOs via poll() auf "/sys/class/gpio/gpio%d/value" ...

Funktioniert eigentlich perferkt, bis auf diese blöden Spitzen :-/

Der Interrupt wird von einem Reed ausgelöst, ich dachte erst der prellt, 
aber zwischen den Impulsen liegen regelmässig 5-6 Sekunden!

Hat jemand eine Idee?

1
                char buffer[BUF_LEN];
2
                struct pollfd fds[inputs];
3

4
                        for (i=0; i<inputs; i++)
5
                        {
6
                                char buffer[BUF_LEN];
7
                                snprintf ( buffer, BUF_LEN, "/sys/class/gpio/gpio%d/value", gpio_pin_id[i] );
8
                                if((fds[i].fd = open( buffer, O_RDONLY | O_NONBLOCK )) ==-1)
9
                                {
10
                                        syslog(LOG_INFO,"Error:%s (%m)", buffer);
11
                                }
12
                        }
13

14
                        for (i=0; i<inputs; i++)
15
                        {
16
                                fds[i].events = POLLPRI;
17
                        }
18

19
                        while(1)
20
                        {
21
                                int ret = poll(fds, inputs, 0 );
22

23
                                        if(ret<0)
24
                                        {
25
                                                syslog(LOG_INFO,"Error: ");
26
                                        }
27

28
                                for (i=0; i<inputs; i++)
29
                                {
30
                                        if (fds[i].revents & POLLPRI)
31
                                        {
32
                                                read(fds[i].fd, buffer, BUF_LEN);
33
                                                http_post(vzuuid[i]);
34
                                        }
35
                                }
36
                        }
Angehängte Dateien:
OP #3059171
Lesenswert?

PittyJ schrieb:
> inputs ist zu klein. sollte mindestens 2n+1 sein.

Hi Pitty,

1
char gpio_pin_id[] = { 17, 18, 27, 22, 23, 24 };
2
int inputs = sizeof(gpio_pin_id)/sizeof(gpio_pin_id[0]);

'inputs' ist eigentlich nur die Anzahl der GPIO Eingänge ...


Du meinst hier -> int ret = poll(fds, inputs, 0 );

"(Input) nfds is the number of pollfd structures in the fds array."
Gast #3059322
Lesenswert?

Ach, da gibt es noch wichtige Teile vom Code, die noch nicht gepostet 
wurden. Das kann ich dann ja auch nicht wissen.
Also habe ich mich geirrt.
Aber gelbe Linie auf weissem Grund izt auch schwer zu erkennen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren