odroid u3 gpio access c++

Gast #4058716
Lesenswert?
• ▲
▼
hi,

kennt sich jemand mit dem odroid u3 aus und kann mir erklären wie ich 
von c++ aus zugriff auf die gpios bekomme? probier es schon den ganzen 
Tag und komm einfach nicht weiter. Gibt es hier eine Library wie z.B. 
beim Raspberry Pi?

eigentlich sollte es so funktionieren :
1
  FILE* f = fopen("/sys/class/gpio/gpiochip199/value", "w");
2
    fputs("0\n", f);
3
    fflush(f);
bekomme aber immer ein "segmentation fault".

Brauche eure hilfe!

Grüße Ajax
Gast #4058725
Lesenswert?
• ▲
▼
Ajax schrieb:
> bekomme aber immer ein "segmentation fault".

dann solltest du mal eine Fehlerbehandlung einbauen.

Eventuell geht ja das öffnen der Datei schon schief, und dann könnte man 
auch noch gleich den error code abfragen und dann hat man genug Infos um 
den Fehler zu beheben.
#4058792
Lesenswert?
• ▲
▼
Also wenn dein GPIO-Treiber die pins als sysfs zur Verfügung stellt (so 
wie du es beschrieben hast) sollte der Zugriff immer gleich geschehen...
Ich benutze auf einem i.mx28 (freescale) das hier:

Edit: Sorry hab die globals vergessen:
1
/* File handle */
2
int iFd;
3
/*
4
 * four chars are enough for a 3-digit gpio number
5
 * and null termination.
6
 */
7
char caValue[4];
8
/*
9
 * 34 chars are enough for /sys/class/gpio/gpioXXX/direction
10
 * and null termination.
11
 */
12
char caPath[34];
1
int GPIO_SetVal(int iGpio, int iValue)
2
{
3
  snprintf(caPath, sizeof(caPath), "/sys/class/gpio/gpio%d/value", iGpio);
4

5
  iFd = open(caPath, O_WRONLY|O_SYNC);
6
  if (0 > iFd)
7
  {
8
    //printf("Cannot open value file.\n");
9
    return -1;
10
  }
11

12
  snprintf(caValue, sizeof(caValue), "%d", iValue);
13

14
  if (1 > write(iFd, &caValue, strlen(caValue)))
15
  {
16
    //printf("Cannot write to value file.\n");
17
    close(iFd);
18
    return -1;
19
  }
20

21
  close(iFd);
22

23
  return 1;
24
}

Davor aber auf jeden Fall auch die Pins exportieren -> echo xx > 
/sys/class/gpio/export und die Richtung 
(/sys/class/gpio/gpion/direction) setzen!
Dann sollte das klappen :)

Gruß
Gast #4058810
Lesenswert?
• ▲
▼
Und jetzt noch in C++ statt C:
1
#include <fstream>
2
#include <string>
3

4
int GPIO_SetVal(int iGpio, int iValue) {
5
  std::ofstream s ("/sys/class/gpio/gpio" + std::to_string(iGpio) + "/value", std::ios::out);
6
  if(s) s << iValue;
7
}
Gast #4058821
Lesenswert?
• ▲
▼
Dr. Sommer schrieb:
> Und jetzt noch in C++ statt C:
1
std::ofstream s ("/sys/class/gpio/gpio" + std::to_string(iGpio) + "/value", std::ios::out);
2
  if(s) s << iValue;

blöde frage, unter welchen Bedingungen kann dann das if nicht war sein? 
Eine Objekt kann doch nicht 0 sein oder wird bei std::ofstream irgendwie 
der vergleichsoperator überschrieben?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.