Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Strings über COM Port schicken/empfangen..Die "10" spinnt ;(

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.11.2005, 16:07 Uhr
~fallen0ne
Gast


Hallo zusammen!

Ich bin gerade dabei über die COM Schnittstelle Strings, die die Größe, ein Keyword und eine Anzahl von Integer Werten enthalten, zu senden auch auch zu empfangen.
Das klappt eigentlich auch relativ gut, nur fängt der an zu spinnen, sobald sich eine "10" darin befindet.

Der String ist folgendermaßen deklariert:

unsigned char send_buffer[255];

und wird dann in einer anderen Funktion über eineen Pointer folgendermaßen gefüllt:

ptr[0]=7;
ptr[1]=0x52;
ptr[2]=20;
*((unsigned short*)&ptr[3])=10;
*((unsigned short*)&ptr[5])=100;

Hier wird die 10 auf 2 Bytes verteilt, was jedoch keine Rolle spielt..selbst wenn ich in nur einem Byte die "10" eintrage, kommt beim empfangenen String folgendes raus:

com_buffer[0]=0x52;
com_buffer[1]=20;
com_buffer[2]=13; <--?!?!?
com_buffer[3]=10;
com_buffer[5]=100;

also wird an den Index vor der 10 eine 13 eingefügt..warum auch immer

Ich vermute den Fehler beim Empfangen-Teil des Programmes, da der Debugger das "Senden-Array" ja noch richtig anzeigt..

Hier der Quelltest des "Empfängers":..


Code:
int main (void) {

    int size;
    uint8 s;
    uint8 com_buffer[255];
    uint8 *ptr=com_buffer;

         FILE* com;

    com=fopen("COM1:","r");
    if(com==NULL){
        printf("Not opened\n");
        }
    else printf("Opened\n");



    size=fgetc(com);
         fread(&com_buffer, sizeof(s), size, com);
    fclose(com);
}



Gesendet wird der String mit :

fwrite(&send_buffer, sizeof(f), k, com)

Hat irgendjemand ne Idee was da los ist?? :-)

Vielen dank schonmal
gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.11.2005, 16:52 Uhr
Tommix



Hallo,

Zitat von MSDN:

If stream is opened in text mode, each carriage return is replaced with a carriage-return – linefeed pair.


Evtl. mußt Du mit "rb" öffnen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2005, 16:55 Uhr
Sponge



Da is mir doch glatt einer zuvor gekommen!
du könntest (um erstmal zu testen, ob es wirklich an deinem Empfängerprogramm liegt mit der kommandozeile deine Daten an den Empfänger schicken (copy daten.txt com1) kann auch sein das es aux1 war und in die daten.txt schreibt du deine Daten die du senden willst (8210...)
ich denke mal dass du an Paritätsbits und so gedacht hast, dass sie auf beiden rechnern gleich eingestellt sind und du nicht auf einem das Paritätsbit einfügst und beim anderen nicht.

Soviel erstmal von meiner Seite
--
Es gibt 10 Arten von Leuten:
die, die das binäre System verstanden haben,
und die, die es nicht verstanden haben ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.11.2005, 17:04 Uhr
~fallen0ne
Gast


jaaa klasse es funktioniert!! :-)
hab bei beiden einfach noch ein "b" hinzugefügt, und dann hat er's gefressen!
warum auch immer..

schon komisch dass das nur binär funktioniert bzw. ohne binäres öffnen nur fast..naja muss man ja auch nicht verstehn

vielen dank nochmal

grruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: