Hallo alle zusammen, ich versuche auf meinem Pandaboard ein paar Daten über die GPIOs auszutauschen und nutze für den Zugriff im Userspace die "Export" - Funktion. Anbei ein Ausschnitt meines Codes: int init_gpio(void) { FILE *fpointer1 = NULL; FILE *fpointer2 = NULL; if((fpointer1 = fopen("/sys/class/gpio/gpio137/direction", "rb+")) == NULL) { if ((fpointer2 = fopen("/sys/class/gpio/export", "w")) == NULL) { return 0; } else { rewind(fpointer2); fwrite("137",sizeof(char), 3, fpointer2); fclose(fpointer2); fpointer1 = fopen("/sys/class/gpio/gpio137/direction", "rb+"); } } rewind(fpointer2); fwrite("in", sizeof(char), 2, fpointer2); fclose(fpointer2); fpointer1 = NULL; fpointer2 = NULL; if((fpointer1 = fopen("/sys/class/gpio/gpio138/direction", "rb+")) == NULL) { if ((fpointer2 = fopen("/sys/class/gpio/export", "w")) == NULL) //GPIO SYSFS; "r+": open file for read/write { return 0; } else { rewind(fpointer2); fwrite("138", sizeof(char), 3, fpointer2); fclose(fpointer2); fpointer1 = fopen("/sys/class/gpio/gpio138/direction", "rb+"); } } rewind(fpointer1); fwrite("low", sizeof(char), 3, fpointer1); fclose(fpointer1); fpointer1 = NULL; fpointer2 = NULL; if((fpointer1 = fopen("/sys/class/gpio/gpio139/direction", "rb+")) == NULL) { if ((fpointer2 = fopen("/sys/class/gpio/export", "w")) == NULL) //GPIO SYSFS; "r+": open file for read/write { return 0; } else { rewind(fpointer2); fwrite("139", sizeof(char), 3, fpointer2); fclose(fpointer2); fpointer1 = fopen("/sys/class/gpio/gpio139/direction", "rb+"); } } rewind(fpointer1); fwrite("low", sizeof(char), 3, fpointer1); fclose(fpointer1); //wenn alles ok, dann: return(1); } ------------------------ Wie man sieht initialisiere ich 3 GPIOs, wie ich sie brauche. Wenn diese nicht exportiert sind, läuft das Programm ohne Probleme durch. Wenn die GPIOs jedoch schon im Userspace vorhanden sind, daher in /sys/class/gpio/ schon auftauchen, bekomme ich einen Fehler (Auszug aus strace): open("/sys/class/gpio/gpio137/direction", O_RDWR) = 3 - - - SIGSEGV (Segmentation fault) @ 0 (0) Segmentation fault (core dumped) Wie man sieht scheitert direkt der erste Zugriff auf "Direction"... Kann mir hier jemand weiterhelfen? Warum funktioniert alles, wenn das Programm die GPIOs selbst in den Userspace "schiebt", aber nicht, wenn diese schon vorhanden sind?! Danke für jede Hilfe :)
Thomas N. schrieb: > rewind(fpointer2); > fwrite("in", sizeof(char), 2, fpointer2); > fclose(fpointer2); fpointer2 is hier entweder NULL oder ge-fclose()-t.
Danke! Das ist natürlich Betriebsblindheit, hier muss natürlich fpointer1 stehen... Manchmal ist es doch gut, eine Nacht über seinen Quellcode zu schlafen. nochmal Danke für die schnelle Hilfe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.