Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Zero -> Raspbian


von Jan H. (janiiix3)


Lesenswert?

Nabend,

ich komme nicht weiter :(
Versuche gerade mit dem PI und wiringPi ein paar GPIO´s zum leben zu 
bekommen.

1
/*
2
*       GPIO
3
*/
4
#include <stdio.h>
5
#include <wiringPi.h>
6
7
int main(void)
8
{
9
         if (wiringPiSetup()==-1)
10
         {
11
                 return 1;
12
         }
13
         else
14
         {
15
                printf("\r\nInit_OK");
16
         }
17
//       pinMode(0,INPUT);
18
19
        while(1)
20
        {
21
//              printf("\r\nStart\r\n");
22
        }
23
24
        return 0;
25
}

Sobald ich die Funktion "pinMode(..)" wieder mit einbinde und das 
Programm kompiliere und ausführen will, kommt ein "Segmentation fault" 
zurück.

Ich weiß ehrlich gesagt nicht mehr weiter..

Das ganze wird mit "gcc" wie folgt aufgerufen..
1
gcc -o led led.c -lwiringPi
Dabei entstehen keine Fehler. Beim ausführen jedoch der besagte.

von Rasputin (Gast)


Lesenswert?

Vielleicht helfen ja die Infos von folgender Seite:

http://wiringpi.com/reference/setup/

......
One of the setup functions must be called at the start of your program 
or your program will fail to work correctly. You may experience symptoms 
from it simply not working to segfaults and timing issues.

Note: wiringPi version 1 returned an error code if these functions 
failed for whatever reason. Version 2 returns always returns zero. After 
discussions and inspection of many programs written by users of wiringPi 
and observing that many people don’t bother checking the return code, I 
took the stance that should one of the wiringPi setup functions fail, 
then it would be considered a fatal program fault and the program 
execution will be terminated at that point with an error message printed 
on the terminal.

        If you want to restore the v1 behaviour, then you need to set 
the environment variable: WIRINGPI_CODES (to any value, it just needs to 
exist)
.......
.......
    wiringPiSetup (void) ;

This initialises wiringPi and assumes that the calling program is going 
to be using the wiringPi pin numbering scheme. This is a simplified 
numbering scheme which provides a mapping from virtual pin numbers 0 
through 16 to the real underlying Broadcom GPIO pin numbers. See the 
pins page for a table which maps the wiringPi pin number to the Broadcom 
GPIO pin number to the physical location on the edge connector.

This function needs to be called with root privileges.
............

Welche Version benutzt du? Vermutlich v2 die immer 0 zurückgibt.
Hast du dein Programm als Root gestartet?
Stimmt das Pin Mapping für den Pi Zero?

von Jan H. (janiiix3)


Lesenswert?

Rasputin schrieb:
> Welche Version benutzt du? Vermutlich v2 die immer 0 zurückgibt.
> Hast du dein Programm als Root gestartet?
> Stimmt das Pin Mapping für den Pi Zero?

Moin,
also ich nutzen die neuste Version 2.xx.
Ich habe mein Programm so gestartet:
1
sudo ./led
jedoch mit dem gleichen Problem.

Sollte das Mapping nicht erstmal egal sein?

von Rasputin (Gast)


Lesenswert?

Jan H. schrieb:

> also ich nutzen die neuste Version 2.xx.
Dann wird die Abfrage "if (wiringPiSetup()==-1)" nie wahr werden, wenn 
du nicht die Environment Variable "WIRINGPI_CODES" definierst und ihr 
irgendeinen Wert gibst. Das ist für dein aktuelles Problem aber 
vermutlich egal.

Du solltest aber die Environment Variable "WIRINGPI_DEBUG" definieren 
und ihr irgendeinen Wert zuweisen, dann sollte WiringPi diverse Debug 
Infos ausgeben die dir vielleicht einen Hinweis auf die Problemursache 
geben.

von Gimpel (Gast)


Lesenswert?

Grumpf

von Jan H. (janiiix3)


Lesenswert?

Rasputin schrieb:
> Jan H. schrieb:
>
>> also ich nutzen die neuste Version 2.xx.
> Dann wird die Abfrage "if (wiringPiSetup()==-1)" nie wahr werden, wenn
> du nicht die Environment Variable "WIRINGPI_CODES" definierst und ihr
> irgendeinen Wert gibst. Das ist für dein aktuelles Problem aber
> vermutlich egal.
>
> Du solltest aber die Environment Variable "WIRINGPI_DEBUG" definieren
> und ihr irgendeinen Wert zuweisen, dann sollte WiringPi diverse Debug
> Infos ausgeben die dir vielleicht einen Hinweis auf die Problemursache
> geben.

Habe ich gemacht. Kommen jedoch keinerlei Meldungen.

von Mario (Gast)


Lesenswert?

Also in Deinem Programm ist kein Fehler.
Installiere das Paket wiringPi noch mal neu.
Hast Du GPIO im in config.txt oder setup aktiviert?

Hier das Blinkbeispiel von http://wiringpi.com/examples/blink:

#include <wiringPi.h>
int main (void)
{
  wiringPiSetup () ;
  pinMode (0, OUTPUT) ;
  for (;;)
  {
    digitalWrite (0, HIGH) ; delay (500) ;
    digitalWrite (0,  LOW) ; delay (500) ;
  }
  return 0 ;
}

 then to compile and run, you would enter:

gcc -Wall -o blink blink.c -lwiringPi
sudo ./blink

von Harry L. (mysth)


Lesenswert?

Starte dein Programm doch mal unter strace.
Dann siehst du, was es macht.
1
strace ./led

von Jan H. (janiiix3)


Lesenswert?

Mario schrieb:
> Also in Deinem Programm ist kein Fehler.
> Installiere das Paket wiringPi noch mal neu.
> Hast Du GPIO im in config.txt oder setup aktiviert?
> gcc -Wall -o blink blink.c -lwiringPi
> sudo ./blink

Man muss noch was aktivieren?

von Mario (Gast)


Lesenswert?

> Man muss noch was aktivieren?
Nee, doch nicht, war falsch gedacht von mir, sorry.

von Jan H. (janiiix3)


Angehängte Dateien:

Lesenswert?

Wenn ich versuche die "wiringPi" zu installieren bekomme ich folgende 
Fehlermeldungen / Warnungen (siehe Bild).
Wo bekomme ich diese Dateien her?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Rasputin schrieb:
> Jan H. schrieb:
>
> also ich nutzen die neuste Version 2.xx.
>
> Dann wird die Abfrage "if (wiringPiSetup()==-1)" nie wahr werden, wenn
> du nicht die Environment Variable "WIRINGPI_CODES" definierst und ihr
> irgendeinen Wert gibst. Das ist für dein aktuelles Problem aber
> vermutlich egal.
> Du solltest aber die Environment Variable "WIRINGPI_DEBUG" definieren
> und ihr irgendeinen Wert zuweisen, dann sollte WiringPi diverse Debug
> Infos ausgeben die dir vielleicht einen Hinweis auf die Problemursache
> geben.
>
> Habe ich gemacht. Kommen jedoch keinerlei Meldungen.

Hast Du die Variable auch exportiert? Sonst kommt die niemals in Deinem 
Programm an.

von Jan H. (janiiix3)


Lesenswert?

Frank M. schrieb:
> Hast Du die Variable auch exportiert? Sonst kommt die niemals in Deinem
> Programm an.

Ich vermute mal das beim Installieren von der wiringPi Bibliothek was 
schief geht..
Beim Installieren zeigt er mir an das irgendwas fehlen soll..

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
Noch kein Account? Hier anmelden.