Hallo, ich lese über RS232 einen String ein *1200, dann wandle ich in int um
1 | |
2 | |
Meine Variable hat dann aber nur den Wert 1152, also 48 zu wenig, wo ist der Denkfehler ? Gruß Christian
|
Anzeige
|
Wo ist mein Denkfehler ?Hallo, ich lese über RS232 einen String ein *1200, dann wandle ich in int um
Meine Variable hat dann aber nur den Wert 1152, also 48 zu wenig, wo ist der Denkfehler ? Gruß Christian Christian St. schrieb: > Hallo, > > ich lese über RS232 einen String ein *1200, dann wandle ich in int um >
> > Meine Variable hat dann aber nur den Wert 1152, also 48 zu wenig, > wo ist der Denkfehler ? Nirgends. Du hättest auch atoi nehmen können, aber das ist ein anderes Thema. Ist sichergestellt, dass du auch tatsächlich den String "*1200" empfängst? Hast du das kontrolliert? Die Antwort "Ja, weil ich den Sendecode kenne" lasse ich dabei nicht gelten. Hast du dir den String, so wie er empfangen wurde, ausgeben lassen? Woher weißt du, dass die Berechnung 1152 ergibt? 1152 weis ich weil ich high- und lowbyte ins EEProm schrein und dann auslese. Das mit dem Ausgeben des Strings mach ich mach ich jetzt gleich mal.
Gast
#2133331
> 1152 weis ich weil ich high- und lowbyte ins EEProm schrein und dann
Und die restlichen 2 Byte nicht kontrolliert?
Joe
Hab meine Dummheit gefunden.
bin bei cnt=4 schon in die Berechnung rein, dabei geht das letze Zeichen unter, da der Buffer mit Nullen gefüllt ist ist 0-48 logisch -48. da sitzt man manchmal davor wie blöd...... Christian St. schrieb: > da sitzt man manchmal davor wie blöd...... Die Lektion lautet: In der Kette Eingabe - Verarbeitung - Ausgabe kann der Fehler überall sein. Also überprüft man zuerst das was am einfachsten geht: die Eingabe. Denn wenn ein Verfahren schon mit falschen Daten gefüttert wird, kann hinten nichts richtiges mehr rauskommen. Während der Entwicklung nichts als korrekt annehmen, solange man sich nicht davon überzeugt hat. Das betrifft auch Daten, die von extern eingespeist werden. tja, manchmal verrennt man sich :-) mit ein Problem war HTerm, da gibt man erst die Zeichenkette an und sendet mit Return. HTerm funzt auch nicht wirklich unter Win7 Hab ne alte Kiste mit winn2000 und Hyperterminal rausgekramt und da wird jedes Zeichen sofort gesendet, dadurch ist mir augefallen das nach dem 4 Zeichen schon das <OK> von meinen System kam. Gibt es für Win7 überhaupt ein gescheites Terminalprogramm ? Hab schon hier im Forum und bei Google gesucht, aber nix brauchbares gefunden HTerm mochte ich geht aber unter win7 nur machmal im Kompatibilitätsmodus und schmiert des öfteren ab, blockiert sich selbst den ComPort. Christian St. schrieb: > Hab ne alte Kiste mit winn2000 und Hyperterminal rausgekramt und da wird > jedes Zeichen sofort gesendet, dadurch ist mir augefallen das nach dem 4 > Zeichen schon das <OK> von meinen System kam. Drum macht man solche Sachen auch selten mit fixen Zeichenzahlen. ASCII Übertragung funktioniert am besten, wenn weder Sender noch Empfänger auf irgendwelche Zeichenzahlen aufpassen müssen. Ein Weg dazu ist zb das abschliessen einer Eingabe mit "Return" (\n) Der Empfänger fügt so lange eine weitere Stelle zur Zahl hinzu, solange er Ziffern in der Eingabe sieht. Kommt der Return, dann ist die Eingabe fertig. Getreu dem Motto while( isDigit( nextCharacter ) ) { Zahl = 10 * Zahl + nextCharacter - '0'; receive next Character } (wie auch immer dann der Teil receive next Character auch aussieht) Mit solch fix vorgeschriebenen Zeichenzahlen schiesst man sich gerne selber mal ins Knie, ohne etwas dafür zu kriegen. ist mir schon klar, hier geht es nur um einen Wert, der auch nur vom Servicetechniker einmalig eingestellt wird. Da reicht "quick and dirty" :-) Danke für die Unterstützung Gruß Christian Christian St. schrieb: > Da reicht "quick and dirty" :-) Gewöhn' dir so 'nen Scheiß gar nicht erst an. mfg. Christian St. schrieb: > ist mir schon klar, > hier geht es nur um einen Wert, der auch nur vom Servicetechniker > einmalig > eingestellt wird. > Da reicht "quick and dirty" :-) noch quicker als ext_offset = atoi( &rx_buffer[1] ); kann ich mir dann eigentlich nicht vorstellen :-) Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|