- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 13

Thema: UART Interrupt in C möglich?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von dremler Beitrag anzeigen
    Nächste Frage (konnte es selbst noch nicht testen): Wenn ich eine Zeichenkette an das RasPi sende, z. B. "ABC", wird das dann "Zeichen für Zeichen" in die "Empfangsdatei" geschrieben, oder mit einem mal? Also sitzt davor noch ein Buffer oder lese ich im ungünstigsten Falle "AB" aus, weil der Empfang noch nicht fertig war?
    Das kommt drauf an, wie du das File behandelst. In Unix gibt es zwei Familien von Filefunktionen, gepuffert und ungepuffert. Schau dir mal die Filefunktionen, die mit f beginnen, wie fopen(), fgets() .. an.

    also ich habe es mittlerweile so gelöst, dass ein Programm im Hintergrund läuft und alles was empfangen wird in eine Datei schreibt
    Damit hast du also den vorhandenen Mechanismus des bufferd-IO neu erfunden. Wobei ich den Sinn nicht so recht verstehe, jetzt pollst du statt einem Device einen File.

    Das UART selbst läuft mit Interrupt und blockiert mit Sicherheit nicht, das geht bei einem Multiuser/Multitasking System garnicht. Die Interrupte landen aber im Kernel. An diesen darf ein Userprozess auch nicht drehen, er könnte ja sonst das Gesamtsystem blockieren. Das was einem Interrupt im Usermode noch am ähnlichsten ist, ist ein Signal. Mache Treiber können ein Signal erzeugen, wenn sich beim IO etwas ändert, muß man mal nachlesen ob der tty-Treiber das macht.

    Wenn man in Unix auf Input wartet, nutzt man gerne den select() Systemcall. Zusammen mit der Möglichkeit, einen Timeout zu setzen, kann man so auch State-Machines programmieren.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Klebwax Beitrag anzeigen
    Das kommt drauf an, wie du das File behandelst. In Unix gibt es zwei Familien von Filefunktionen, gepuffert und ungepuffert. Schau dir mal die Filefunktionen, die mit f beginnen, wie fopen(), fgets() .. an.



    Damit hast du also den vorhandenen Mechanismus des bufferd-IO neu erfunden. Wobei ich den Sinn nicht so recht verstehe, jetzt pollst du statt einem Device einen File.

    Das UART selbst läuft mit Interrupt und blockiert mit Sicherheit nicht, das geht bei einem Multiuser/Multitasking System garnicht. Die Interrupte landen aber im Kernel. An diesen darf ein Userprozess auch nicht drehen, er könnte ja sonst das Gesamtsystem blockieren. Das was einem Interrupt im Usermode noch am ähnlichsten ist, ist ein Signal. Mache Treiber können ein Signal erzeugen, wenn sich beim IO etwas ändert, muß man mal nachlesen ob der tty-Treiber das macht.

    Wenn man in Unix auf Input wartet, nutzt man gerne den select() Systemcall. Zusammen mit der Möglichkeit, einen Timeout zu setzen, kann man so auch State-Machines programmieren.

    MfG Klebwax
    Ah danke für die Erklärung.
    Der Grund, warum ich das in eine Datei schreibe ist der, weil mehrere Ressourcen auf den Empfangenen Text zugreifen müssen.
    Aber das der UART bereits über Interrupt läuft wusste ich nicht.
    Hab es bisher so vermutet, dass wenn ich z.B. in Python mit dem "serial.read()" arbeite das er auch den UART einfach nur pollt.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    35
    Beiträge
    841
    Blog-Einträge
    1
    Aus aktuellem Anlass nochmal die Frage: Gibt es in C auf dem Raspberry Pi die Möglichkeit, Timer Interrupts zu nutzen? Ich möchte nur sehr ungern Delay Schleifen nutzen...

  4. #4
    Max Web
    Gast
    Hallo,

    das wird so vermutlich auch nicht gehen. Allerdings gibt es unter sys/time.h einige sehr nützliche Tools zum Thema Timer.
    Außerdem bekommst Du drei Timer, die Du mit getitimer() und setitimer() kontrollieren kannst. Diese lösen verschiedene Signale aus, auf die Du reagieren kannst.
    Das ist zwar nicht ganz so toll wie das direkte Benutzen von Interrupts, aber sicherlich ein interessanter Ansatz.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Das ist normale C Programmierung. Timer werden in der Regel über separate Threads gelöst welche diese Zeit eben im sleep sind. Persönlich mache ich sowas mit boost in C++, aber unter C geht das prinzipiell genauso. Direkte Interrupts wie du sie auf den AVRs kennst werden in Linux auf PCs anderst gelöst.... eben mit Threads. Siehe dazu auch [1] [2]

    Ereignisgesteuert auf UART zu reagieren geht auch mittels select [5] . Unter C++ würde ich das mit boost::asio [3] [4] lösen
    Gruß
    Georg

    [1] http://en.wikipedia.org/wiki/POSIX_Threads
    [2] https://computing.llnl.gov/tutorials/pthreads/
    [3] http://www.boost.org/doc/libs/1_53_0...oost_asio.html
    [4] http://www.boost.org/doc/libs/1_53_0...rial_port.html
    [5] http://stackoverflow.com/questions/1...to-work-on-tty
    Geändert von schorsch_76 (27.06.2013 um 11:48 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    33
    Beiträge
    802
    C Programmierung am Pi ist normale Linuxprogrammierung -> ergo ganz normale C/C++ Programme möglich, Schnittstellen können einfach wie Dateien gelesen werden, ohne Probleme. Interrupts gibt es generell nicht, außer man programmiert ein Kernelmodul. Dafür gibt es aber Threads und Prozesse.
    Kultuverein Metal Resurrection, für mehr Bands und Konzerte in Österreich (:

Ähnliche Themen

  1. Code Optimierung für Interrupt möglich?
    Von erik_wolfram im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 13.09.2011, 22:21
  2. Software Uart, Interrupt möglich?
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 07.03.2011, 16:53
  3. 3 UART Empfänger an einem Sender möglich?
    Von Accenter im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 29.05.2010, 18:36
  4. Hardware UART + Software UART gleichzeitig möglich?
    Von eevox im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 22.04.2007, 18:54
  5. Interrupt & Debounce möglich?
    Von Wasi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 04.11.2005, 14:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress