Bytes über die serielle Schnittstelle senden



  • Hallo!

    Ich möchte in C unter Linux Pakete mit einer beliebigen Anzahl von Bytes senden.
    Dazu lege ich ein char-Array an und definiere es mit Startwerten.
    z.b.

    char chararray[] = {0xef, 0xe3, 0x00, 0x23, 0x1a}
    

    Dieses möchte ich dann über die serielle Schnittstelle an einen Microcontroller senden. Dazu nutze ich die write-Funktion auf einen vorher angelegten File-Deskriptor, auf den ich die serielle Schnittstelle eingestellt habe.
    Das Problem ist, das das Programm das senden immer bei einem 0x00 Byte beendet (ist ja normalerweise das String-Ende-Symbol).
    Ich bräuchte also eine Write-Funktion, die nicht bei 0x00 aufhört zu senden, sonder der ich eine Länge mitgeben kann, die auf jeden Fall gesendet wird, unabhängig vom Array-Inhalt.

    Wie kann ich das lösen? Danke für eure Antworten!!



  • TS-Tec schrieb:

    Ich bräuchte also eine Write-Funktion, die nicht bei 0x00 aufhört zu senden, sonder der ich eine Länge mitgeben kann, die auf jeden Fall gesendet wird, unabhängig vom Array-Inhalt.

    Ich weiß ja nicht, welche write-Funktion du benutzt, aber bei der, die ich kenne, kann man die Anzahl der Bytes angeben. Kann natürlich sein, dass du selbst da irgendeinen Wert angibst, der auf die falsche Art und Weise (z.B. mit strlen) ermittelt wurde. Ohne den Code zu kennen, kann man dazu nicht viel sagen.



  • Hallo!

    Du hast recht! Habe tatsächlich die Länge über strlen eingelesen, dann ist das ja klar, sorry wegen der doofen Frage.
    Daraus folgt jedoch meine nächste Frage:
    ich lese die Antwort ja mit read ein, weiß aber noch nicht die Länge der Antwort. Irgendwie ist aber wohl mein serieller Port so konfiguriert, dass read() aufhört, wenn ein CR kommt. Wenn ich über ein terminal-Programm etwas sende und mit [ENTER] abschließe, springt die Funktion jedenfalls zurück und liefert mir die Eingabe.
    Aber da der Microcontroller ja wie gesagt nur Bytes sendet, muss ich irgendwie so lange lesen, bis der Puffer leer ist. Wie kann ich das einstellen??



  • Habe eine Frage an dich:
    Wie hast du den Filedeskriptor auf die serielle (ich vermute die RS-232) Schnittstelle umgeleitet?

    Mach gerade auch ein sehr ähnliches Projekt, und muss auch ein char Array bzw. eine Bytefolge über eine serielle Schn. schicken.
    (also ich habe mir ein eigenes Protokoll überlegt, in dem auch die Länge der gesamten Bytefolge in irgendeinem Byte (Wert 0-255 möglich) steht)


Log in to reply