000
04.10.2004, 22:22 Uhr
vision
|
Hallo,
ich habe den Quellcode für ein DOS-Programm geschrieben in C. Nun möchte ich, das Programm in VC++/MFC neu schreiben, damit es unter Windows XP und Win 2000 läuft.
Zur Funktionsweise: vom Benutzer wird eine Zahlen-/Buchstabenkombination eingegeben, im Programm in einen String umgewandelt, über die serielle Schnittstelle an ein externes Gerät ausgegeben, dort mit einem Algorithmus in einen mehrstelligen Zahlenwert umgewandelt. Dieser wird vom Programm über die serielle Schnittstelle wieder empfangen und dem Benutzer angezeigt.
Um Ursprungscode wurden noch die Befehle inp und outp verwendet, die direkt auf die Schnittstellenadressen zugreifen, was aber bei Windows XP und 2000 nicht mehr möglich ist.
Ich habe zur Initialisierung der Schnittstelle (Baudrate, Anzahl Datenbits,..) Funktionen aus der Klasse CSerialPort (mit den Dateien "serialport.h" bzw. "serialport.cpp") benutzt. Quelle siehe hier: www.codeproject.com/system/cserialport.asp
Was mir bei der Übersetzung am meisten zu schaffen macht, sind die folgenden Funktionen TXBE und RDA, bei denen bestimmte Bits des Buffers abgefragt werden.
Gibt es da auch bestimmte Funktionen, die auch die Klasse CSerialPort anbietet?
Ich verstehe auch leider nicht, was (bzw. wo) genau diese Bits zu finden sind. Sind das sind das bestimmte Register des UART?
Beginnen tut das Ganze mit der Funktion in dem der String *outstr an diese Funktion übergeben wird. Und später wird das Ganze mit der Funktion recv als *inpstr wieder gelesen.
C++: |
int TXBE ( int PortBase ) /* Transmit Buffer Empty */ { return(inp(PortBase+5) & 0x20); /* Teste bit 5 - Senderegister leer? */ }
int RDA ( int PortBase ) /* Received Data Available */ { return(inp(PortBase+5) & 0x01); /* Teste bit 0 - Empfangsdaten gültig? */ }
void txch( char outchar ) /* Daten senden */ { int value; while (!TXBE(PortBase)) { } value = outp(PortBase,outchar); value = value; /* Dummy-Statement for Compiler-Errors */ }
int rxch( int timeoutval, int PortBase ) /* Daten empfangen */ { do { if (RDA(PortBase)) { return(inp(PortBase)); /* char received OK */ } } while (timeoutval-- != 0); return( -1 ); /* time out */ }
void send ( char *outstr ) { while ( *outstr != '\0' ) { txch(*outstr++); } }
int recv ( char *inpstr, int maxlen, int PortBase ) { char ch1; int count; count = 0; do { ch1 = rxch((int)65000,PortBase); if (ch1 == -1) { *inpstr = '\0'; return ( 0 ); } *inpstr++ = ch1; } while ((ch1 != CR) && (count++ <= maxlen)); // CR= Ascii 13 als letztes Zeichen im String *inpstr = '\0'; return ( count ); }
|
Ist vielleicht jemand in der Lage, die kompletten Teile zu übersetzen? Ich kenne mich leider nicht so sehr mit der Schnittstellen-Kommunikation aus und bin auch erst seit Kurzem bei VC++.
Danke schonmal für eventuelle Hilfe Dieser Post wurde am 04.10.2004 um 22:58 Uhr von vision editiert. |