Ich möchte zwei serielle Ports in C verbinden/überbrücken. Ich habe 2 Threads, die die Ports lesen und auf den anderen Port schreiben. Hier ist ein Beispiel:Verbinden von zwei seriellen Ports in C
void *rfid_to_uart_thread(void *) {
char rfid_read_buffer[100];
int writeCounter;
do {
writeCounter = read(rfidCom, rfid_read_buffer, sizeof(rfid_read_buffer)-1);
if (writeCounter > 0) {
write(uartCom, rfid_read_buffer, writeCounter);
} else
usleep(25);
} while (!bKillBridgeThreads);
return NULL;}
Das Problem ist, scheint es, dass die Schreibvorgänge zu langsam sind. Ich empfange oft nur die Hälfte der Saite auf der anderen Seite. Es scheint, als wäre der Schreibvorgang asynchron und der Puffer wird in der nächsten Schleife wieder überschrieben und überschreibt das letzte 'Schreiben', so dass die Daten verkrüppelt sind ?! Ist das richtig?
Die Ports werden geöffnet NON_BLOCKING und RW, Baudrate und hat 9600.
Also, Sie haben zwei COM-Ports mit 2 Fäden, 1 Anschluss für Gewinde. Der Thread schreibt an seinen COM-Port oder an einen gemeinsamen? – Raskayu
Der angegebene Code ist ein einzelner Thread, in dem Sie versuchen, von einem Port (rfidcom) zu lesen und in einen anderen Port (uartCom) zu schreiben. Also im Code ist der Code sequenziell. also ist kein Weg asynchron. Der Schreibvorgang wird ausgeführt, sobald das Lesen vom rfid-Gerät gelesen wurde (100 Byte oder weniger). Ist es so, dass die Puffergröße, die zum Lesen gegeben wird, klein ist? –
Sorry, vielleicht war die Frage irreführend. Es ist in Ordnung für "schreiben", nur das zu schreiben, was beim Lesen empfangen wurde. Auf der UART-Seite habe ich einen TeraTerm-Lauf, der nach der Ausgabe des RFID-Moduls Ausschau hält, die an den UART gesendet werden muss. Manchmal erhalte ich über UART "2FEF0000" und das nächste Mal bekomme ich "2FEF00001000 \ r".Also vielleicht ist das Problem mehr wie schreiben nicht alles schreibt, es ist gepuffert? Gibt es eine Möglichkeit, alle noch im Puffer befindlichen Zeichen zu erzwingen? – Tobi