Homepage Wiki Forum Buy

GNUBLIN embedded GNU/Linux

Open source learning and training plattorm for embedded GNU / Linux
A projects from Hochschule Augsburg and embedded projects GmbH

Project homepage: http://www.gnublin.org
Wiki: http://wiki.gnublin.org
Aktuelle Zeit: Mo 16. Jul 2018, 03:02

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr 2. Jan 2015, 10:33 
Offline

Registriert: Mo 22. Dez 2014, 09:38
Beiträge: 8
Hallo,

Ich habe mit dem Gnublun-lan eine UDP Kommunikation realisiert. Leider ist das Abfragen der Daten bis das UDP Paket kommt blockierend. Gibt es ein SIGNAL dafür oder ein Interrupt. Hat es schon mal einer geschaft und eventuell ein kleines Beispiel UDP Pakte mit einem interrupt zu empfangen?


Nach oben
 Profil  
 
BeitragVerfasst: Fr 2. Jan 2015, 10:49 
Offline

Registriert: Di 26. Jun 2012, 10:27
Beiträge: 172
Wo blockiert was? Mehr Infos!


Die Netzwerkschnittstelle wird komplett vom Kernel Verwaltet.
In einem C-Programm, kannst du die Posix Schnittstelle verwenden, um einen TCP oder UDP Server zu erstellen.

http://www.microhowto.info/howto/listen ... _in_c.html


Falls du schon soweit bist, meinst du die Funktion "recvfrom()" oder angliche die dein C-Programm blockiert?
Das ist normal so, damit das Hauptprogramm weiterläuft, legt man die Kommunikation in einen Thread aus, und synchronisiert mit Mutexe.
Schau mal nach pthread.


Nach oben
 Profil  
 
BeitragVerfasst: Fr 2. Jan 2015, 12:10 
Offline

Registriert: Mo 22. Dez 2014, 09:38
Beiträge: 8
Ja danke. Genau ich mein recvfrom().

Ich werde es mit einem Thread probieren. Komme aus der C Programmierung ohne Betriebssystem.
Dort mache ich immer alles mit Interrupts. Ist das mit dem Thread ein sauberer weg? Oder gibt es noch elegantere Lösungen?


Nach oben
 Profil  
 
BeitragVerfasst: Fr 2. Jan 2015, 12:27 
Offline

Registriert: Di 26. Jun 2012, 10:27
Beiträge: 172
Normalerweise macht man das immer mit Threads. Jeweils einen für empfangen/lesen und einen für sendern/schreiben.

Es gibt noch die Möglichkeit den Socket-Descriptor mit der Funktion fcntl() zu modifizieren und ihm das Attribut nonblocking zu geben.
Dann springt recvfrom() sofort raus. Returnwert ist dann aber -1. Du musst dann auf jeden fall die globale Variable "errno" abfragen um zu erfahren was los ist.

http://man7.org/linux/man-pages/man2/recvmsg.2.html
http://man7.org/linux/man-pages/man2/fcntl.2.html
http://man7.org/linux/man-pages/man3/errno.3.html


Nach oben
 Profil  
 
BeitragVerfasst: Fr 2. Jan 2015, 13:08 
Offline

Registriert: Mo 22. Dez 2014, 09:38
Beiträge: 8
Ja super danke für die guten Ratschläge. Ich denke mit dem Thread ist aber am saubersten. Ich werde das mal probieren und schauen wie die Performance ist und ob Pakte verloren gehen


Nach oben
 Profil  
 
BeitragVerfasst: Fr 2. Jan 2015, 20:44 
Offline

Registriert: Mo 22. Dez 2014, 09:38
Beiträge: 8
Ein Thread war die Lösung. Das funktioniert bestens. Einfach den Socket in einem Thread Pollen.

Aber irgendwie wäre Interrupt noch besser wenn das möglich wäre. Denke ich zumindestens


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de