Ich habe einen Mikroprozessor, auf dem C-Code läuft, und einen Computer, auf dem C#-Code läuft. Ich versuche, sie über eine serielle Verbindung (System.IO.Ports.SerialPort) miteinander kommunizieren zu lassen. Ich habe keine Probleme mit der Verbindung, sondern eher mit der Kommunikation.
In C# habe ich Code wie diesen, um die Zeichenfolge "rr" zu senden \n ":
mySeiralPort.WriteLine("rr");
In C (auf dem Mikrocontroller) habe ich einen Code wie den folgenden, um die Zeichenkette zu empfangen:
gets(str);
Beachten Sie, dass der STDIN-Stream der Serialport-Stream ist. Hier wird es nun interessant. Als Test haben wir ein Stück Code, das eine LED aufleuchten lässt, wenn str
gleich "rr" ist. Auf diese Weise können wir beobachten, ob der Mikrocontroller die Nachricht wie erwartet empfangen hat oder nicht.
Wenn ich HyperTerminal verwende, kann ich "r" eintippen, dann "r", dann die Eingabetaste drücken -> und die LED leuchtet auf und signalisiert, dass tatsächlich "rr" aus dem seriellen Stream gelesen wurde. Wenn ich jedoch die obige Funktion verwende WriteLine
Funktion von C#, erhalten wir kein solches Ergebnis.
Ich glaube, dass dies auf die Funktionalität von HyperTerminal zurückzuführen ist, das Zeichen für Zeichen sendet, und dass die gets()
Funktion liest Zeichen für Zeichen, bis sie auf einen Zeilenumbruch stößt.
Kann jemand etwas Licht auf, wie man C #'s bekommen WriteLine()
und C's gets()
Funktionen zusammenarbeiten?