COM (RS232) Port hat zu viel zeitverzug



  • Hi!
    nach längerer suche um mein problem zu lösen bin ich nun an einem punkt,
    an welchem ich keine idee mehr habe, aber ich hoffe ihr wisst vielleicht
    was dazu.

    folgendes problem:
    ich lese einen act-empfänger an der seriellen schnittstelle aus.
    der empfänger liefert mir einen sich ca alle 20ms wiederholenden stream beginnend mit "255 255" von je 33 bytes (unsigned char) in welchem die empfangsdaten einer fernsteuerung übertragen werden. die baudrate beträgt 38400.
    das ganze mach ich auf einem minimalen ubuntu linux mit echtzeitkernel.
    prinzipiell ist das auch kein problem, ich hab das act-protokol und die
    daten kommen auch alle richtig an.
    wie ihr im source sehen könnt mach ich das über eien signal handler, der
    veranlasst den port auszulesen und die daten dann passend in einen
    input-array einordnet.
    dieser input-array wird dann passend aufgearbeitet und wiederum in einem
    output-array gespeichert der dann weitergesendet werden soll, bzw. erst
    mal an der console ausgegeben wird.
    zum testen mache ich im augenblick nichts anderes als das input signal
    zu invertieren, wenn kanal 5 auf high steht, wenn kanal 5 auf low ist
    wird nichts mit dem signal gemacht.
    hoffe soweit ist alles verständlich, nun das problem:
    wenn ich die daten in der console ausgebe hab ich ein zeitverzug von
    4-10 sekunden! das macht sich in sofern bemerkbar, dass wenn ich einen
    knüppel der fernsteuerung bewege diese änderung ebend erst 4-10 sekunden
    später ausgegeben wird.
    am usb-to-rs232 converter kanns nicht liegen, da es an einem anderem computer unter windows wunderbar funktioniert.
    mein erster gedanke war das es vielleicht an einem irq-konflikt liegt, also hab ich mal damit gespielt geräte im bios abzuschalten, damit sich der irq ändert, ohne erfolg. gänzlich ausschliessen kann ich dieses problem aber noch nicht.
    nachdem ich noch relativ wenig erfahrung mit der rs232 programmierung auf pc's habe und ich auch mit dem blocking/no-blocking bei seriellen schnittstellen noch nicht 100% durchgestiegen bin, vermute ich den fehler beim initialisieren des ports, bzw. bei der handhabung mit dem signal-handler?!?

    source ist zu finden in http://www.trash.net/users/ska/UNI/Semesterarbeit/C-Source-Linux/aktuell/

    main.c - Hauptprogramm inclusive Signalhandler
    COM.h - RS232 initialisierung & Communikation
    DSL.h - Verarbeitung des Signals
    SIGNAL.h - Initialisierung des Signalhandlers
    lconio.h - ne art conio.h für linux

    ich hoffe jemand weiss, oder sieht am source, woran es liegt/liegen könnte.
    vielen dank schon mal für eure hilfe!
    gruß maddis

    p.s. ich hoffe meine beschreibung ist verständlich, bei unklarheiten ergänze ich auch gerne noch!



  • Ich hab natürlich an der total falschen Stelle gesucht! .....
    Es lag nicht am COM-Port, oder dessen initialisierung, sondern an der eigenen kbhit() funktion. die ist zu langsam, somit wird auch die schleife zu langsam ausgeführt!
    Gruß Maddis



  • Hallo Maddis,

    ich wollte auch etwas mit den ACTs spielen. Kannst Du mir das Protokoll zukommen lassen? Ich würde mich freuen. Email: a n d @ n u r f u e r s p a m . d e

    ohne Leerzeichen natürlich ;-). Vielen DAnk,

    Gruß,

    Andre


Anmelden zum Antworten