C

Rund um die Software von Revolution Pi
Tim
Posts: 23
Joined: 08 Jun 2017, 08:19

C

Post by Tim »

Hallo,
ich möchte gern ein Programm mit der Programmiersprache C schreiben, welches auch die Ein- und Ausgänge des Revolution Pi verwendet.
Durch das Video " PiTest Sourcecode" habe ich bereits einen Einblick in die Thematik erhalten.
Nun zu meiner Frage: gibt es noch einen anderen einfacheren Weg als über das "Makefile"? Oder muss ich jedes mal die Datei "piTest.c" überschreiben?
Für die verwendung von I/O´s werden ja die Bibliotheken " piControl.h" und "piControlIf.h" benötigt. Nur leider lassen sich diese über den befehl "gcc" nicht einbinden.
Irgendwelche ideen?
Tim
Posts: 23
Joined: 08 Jun 2017, 08:19

Re: C

Post by Tim »

Ich konnte mein Problem soeben selber lösen durch die verwendung von "gcc -I/home/pi/testordner testlampe.c piControlIf.c", dazu müssen sich die Dateien "piControl.h“, „piControlIf.h“ und „piControlIf.c" im selben Ordner, wie die c-Datei, befinden.
Viel Spaß=)
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: C

Post by volker »

Hallo Tim,
Du brauchst eigentlich nicht wirklich diese ganzen Definitionen in den .h Dateien des Beispiels. Die eigentlichen Aufrufe, welche Du in Dein C-Programm übernehmen kannst, befinden sich in piControlIf.c udn bracuhen lediglich die Biliotheken
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdio.h>
Du machst ein Open auf einen Fildhandle (miit dem Devicenamen "/dev/piControl0"), dann einen seek mit diesem handle auf den Offset im Prozessabbild und dann einfach ein write oder read. Das ist schon alles. Derganze Rest geht dann nur um Sonderfunktionen von PiControl, wie z.B. der Zugriff über symbolische Namen, das Setzen oder Löschen einzelener Bits oder ein Reset vom Treiber, etc. Dafür brauchst Du IOCTL Zugriffe, die deutlich komplexer sind und für die im Wesentlichen auch die meisten Definition in den .h-Dateien stehen. Sie brauchen zum Beispiel bestimmte Strukturen als Parameter und auch bestimmte Funktionsnummern als Parameter.
Aber fang einfach mal mit den ganz einfachen Aufrufen von oben an und hol Dir so IOs. Übrigens lohnt sich vielleicht auch mal ein Blick auf unseren Python-Quellcode für den Zugriff auf das Prozessabbild. Der ist deutlich weniger komplex als PiTest (wenn Du einfach mal die etwas komplizierten Konvertierungsfunktionen by Python außer Acht lässt, mit denen man dort Byte-Arrays erzeugen oder auslesen musst).
Unser RevPi Motto: Don't just claim it - make it!
Tim
Posts: 23
Joined: 08 Jun 2017, 08:19

Re: C

Post by Tim »

Hallo Volker,
danke für deine Antwort.
Ich habe probiert, einen eingang Einzulesen und diesen mir ausgeben zu lassen, leider bekomme ich nur den Wert "0", egal welcher Eingang betätigt wird. Kann mir wer sagen wo mein fehler ist?
Ich habe folgendes probiert:

//-------------------------------------------------------------------

#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{

int daten[2];
const int offset=2;

while(1)
{
FILE *control;
control= fopen("/dev/piControl0", "rb");
fseek(control, SEEK_SET, offset);
fread(daten, 2, 1, control); //schreibt die werte in den bereich daten, die größe eines Blocks, anzahl der Blöcke, Stream aus dem gelsen wird
printf("\n%d",daten[0]);
fclose (control);
}
}

//--------------------------------------------------------------------------
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: C

Post by volker »

Wie ist Deine Systemkonfiguration unter PiCtory? Was sagt der Export der Offsetliste? Was steht dort auf Offset 2?
Unser RevPi Motto: Don't just claim it - make it!
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: C

Post by volker »

Funktioniert denn PiTest wenn Du es aufrufts mit diesem Offset? Am besten probierst Du immer erst mal mit PiTest. Das Programm ist ja auf allen RevPis vorhanden. PiTest -r liest Daten aus dem PA. Wenn Du Deinen geplanten Offste damit korrekt auslesen kannst, dann sollte es auch mit Deinem C-Programm gehen (außer Du bekommst dort vom System Fehlermeldungen).
Unser RevPi Motto: Don't just claim it - make it!
Tim
Posts: 23
Joined: 08 Jun 2017, 08:19

Re: C

Post by Tim »

Hallo Volker,
danke für dein Antwort.
Ja, unter piTest wird mir auch der Offset 2 ausgegeben.
Ich bekomme "leider" keine Fehlermeldung, aber es funktioniert trotzdem nicht.
Tim
Posts: 23
Joined: 08 Jun 2017, 08:19

Re: C

Post by Tim »

Hier nochmal die Exportliste.
Der Offset 2 ist hier vorgegeben.
Attachments
export.jpg
export.jpg (62.54 KiB) Viewed 7023 times
Timo
Posts: 44
Joined: 25 Jan 2017, 10:08

Re: C

Post by Timo »

1.) Du hast was von Eingang 2 geschrieben, aber in deinem Beispiel gibst du nur Eingang 1 aus:
Ist: printf("\n%d",daten[0]);
Soll: printf("\n%d %d",daten[0], daten[1]);

2.) Was sagen die Rückgabewerte der Funktionen bei dir?

3.) In meinem Code verwende ich die Funktionen "open()", "lseek()" und "read()". Vielleicht klappt es damit?
Tim
Posts: 23
Joined: 08 Jun 2017, 08:19

Re: C

Post by Tim »

Hallo Timo,
danke für deine Antwort.
Kannst du mir ein einfaches Beispielcode dafür geben. Mit dem ich z.B. den Eingang 1 einlesen und ausgeben kann?
Post Reply