-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: UART Interrupt in C möglich?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    28
    Beiträge
    841
    Blog-Einträge
    1

    UART Interrupt in C möglich?

    Anzeige

    Kann ich beim RasPi irgendwie UART Interrupts auslösen und nutzen? Ich möchte das Ganze in einem C Programm nutzen und Polling umgehen, also nicht ständig in der TTY Datei rumlesen müssen.


    Ich konnte nix finden

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ich glaube das geht nicht (zumindest ist es nicht so einfach wenn es gehen sollte...).
    Wollte den selber mal nutzen, aber am Polling kommst du nicht vorbei
    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
    28
    Beiträge
    841
    Blog-Einträge
    1
    Hm, das ist schade, weil unsauber

    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?

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Es wird Zeichen für Zeichen empfangen.
    Du musst also ein Programm schreiben, welches jedes Zeichen einließt, in einem String speichert und bei einem bestimmten Zeichen (z.B. CR) den String überträgt.
    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

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    28
    Beiträge
    841
    Blog-Einträge
    1
    Ach sowas doofes, naja wird wohl ein Ringpuffer werden

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Hey,

    also ich habe es mittlerweile so gelöst, dass ein Programm im Hintergrund läuft und alles was empfangen wird in eine Datei schreibt (quasi der selbe Ansatz wie bei Peterfidos Internetradio).
    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    28
    Beiträge
    841
    Blog-Einträge
    1
    Interrupts mit Timern wird es dann in der RasPi C Programmierung auch nicht geben oder? Bleibt mir nur die Möglichkeit, alles zyklisch in der Hauptschleife aufzurufen?

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    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 !

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    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

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    28
    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...

Seite 1 von 2 12 LetzteLetzte

Ä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, 23:21
  2. Software Uart, Interrupt möglich?
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 07.03.2011, 17:53
  3. 3 UART Empfänger an einem Sender möglich?
    Von Accenter im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 29.05.2010, 19: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, 19:54
  5. Interrupt & Debounce möglich?
    Von Wasi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 04.11.2005, 15:02

Berechtigungen

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