serielle Schnittstelle auslesen (bisher nur Kryptische Daten erhalten)



  • sorry, werde ab jetzt die [cpp]-Tags benutzen.

    das mit printf, war nur ein versuch, der aber leider nicht funktionierte.
    bekomme meine Werte einfach nicht wie gewünscht ausgegeben.



  • 1. Wofür brauchts Du die ineinander verschaltelten Schleifen? Du brauchst sie nicht.
    2. in den for Schleifen inkrementierst Du beides mal i -> Fehler!
    3. buf ist immer noch nicht initialisiert.

    Ich schlage Dir vor erstmal ein Buffer anzulegen, zu initialisiern, von Hand mir Werten füllen (à la buf[0] = 0x12) und den dann auszugeben.

    Dein Problem hat, denke ich, (noch) nichts mit der seriellen Schnittstelle zu tun.

    Simon



  • Warum versuchst du nicht eine Klasse dafür zu verwensen, welche die WinApi funktionalität kapselt,

    ich kann mich erinnern, dass mynonA und AJ mal eine solche Klasse geschrieben haben, dies sollte dein Vorgehen vereinfachen können.

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39312-and-highlight-is-str%F6me+lenken.html



  • Das problem liegt (noch) nicht dort...



  • @EvilDaddy: danke für den Vorschlag, aber für mich leider das falsche. Versuche ja lediglich den Port auszulesen und zwar auf Hex Basis.

    @theta: habe eine Schleife rausgenommen und versucht buf zu initialisieren....
    leider bekomme ich nichtmal jetzt eine vernünftige ausgabe obwohl ich den ReadFile - Teil erstmal rausgenommen habe 😞
    bastle jetzt an der initialisierung, dass das dann zumindest erstmal läuft.

    danke soweit schonmal!



  • per Debugger bekomme ich immer nur "|||||" als Variablen-Inhalt angezeigt



  • Zeige deinen Code...



  • char buf[7];
    DWORD read =0;
    DWORD i=1;
    
    buf[0]=0x11;
    buf[1]=0x31;
    buf[2]=0x55;
    buf[3]=0x03;
    buf[4]=0x72;
    buf[5]=0x14;
    buf[6]=0x13;
    buf[7]=0x30;
    
    for(i=0; i<read; i++)
    {
            std::cout << std::hex << buf << std::endl;
    }
    

    Hab mal den std::hex Teil versucht, aber läuft genauso wenig wie meine vorherige Variante.

    Danke nochmals für alle Eure Mühen.



  • 1. Dein Buffer hat 7 Plätze, Du greifst aber auf den 8. ten zu ➡ Fehler
    2. In der Schleife musst Du die Elemente einzeln rausholen mit buf[i] und nicht einfach buf
    Edit:
    3. Du initialisierst read auf 0 ➡ Schleife wird 0 mal durchlaufen.

    char buf[8] = { };
    buf[0] = ..
    .
    .
    .
    buf[7] = ...
    
    DWORD read = 8;
    
    for(int i=0; i < read; i++) 
    {
       unsigned int value = static_cast<unsigned int>(buf[i]);
       std::cout << std::hex << value << std::endl; 
    }
    


  • Erstmal danke theta.

    zu 1. du hast natürlich Recht, das habe ich so garnicht gesehen! (dummer Fehler!!)
    2. und 3. habe meinen Code, nach deinen Vorgaben abgewandelt, aber bekomme keine meine vorher Definierten Werte, die ich für "buf" definiert habe ausgegeben.
    Lediglich wieder komische kryptische Zeichen.

    Hier der abgewandelte Code:

    char buf[8];
    DWORD read =8;
    
    buf[0]=0x11;
    buf[1]=0x31;
    buf[2]=0x55;
    buf[3]=0x03;
    buf[4]=0x72;
    buf[5]=0x14;
    buf[6]=0x13;
    buf[7]=0x30;
    
    for(int i=0; i<read; i++)
    {
    	unsigned int value = static_cast<unsigned int>(buf[i]);
    	std::cout << std::hex << value << std::endl; 
    }
    


  • Post mal die kryptischen Zeichen... bei mir gehts nämlich.

    Ausserdem... warum initialisierst Du buf nie?
    Das geht so char buf[7] = { };

    Simon



  • Wenn ich es so initialisiere, dann bekomme ich gleich 46 Fehler.

    Hier einmal die Zeichen (||1U|||'|@*)
    Das ist dann der Inhalt, der in buf steht.....



  • Wenn ich es so initialisiere, dann bekomme ich gleich 46 Fehler.

    Interessant.. und was für welche?
    Was für eine IDE / Compiler verwendest Du?
    Hat das Source File die Endung cpp?

    Probiers mal so:

    char buf[7] = { 0 };
    

    Tja und wie sieht der Buffer Inhalt im Debugger aus?
    Notfalls mal auf Hex Anzeige umschalten.

    Simon



  • mit der 0 klappt es und ich habe keine Fehler mehr.
    trotzdem immer noch der selbe buf Inhalt.

    ja, die Sorce File ist eine cpp.

    Schaue mir den Inhalt immer erst im Debugger an.
    Was ich zuletzt geschrieben habe, war der Inhalt der buf Variable, die ich im Debugger ausgelesen habe.

    Verwende Microsoft Visual C++ 6.
    Wo stelle ich denn da im Debugger auf Hex Anzeige um??

    Danke dir



  • danke



  • 8 ist korrekt.
    Da sind die Indices 0..7



  • aber wo liegt denn jetzt mein Fehler, dass es bei dir klappt und bei mir nicht??

    wie schalte ich denn beim debug modus auf hex??

    also ganz genau habe ich in buf diesen wert drin stehen (debug modus):

    buf = 0x0012f594 "|1U|r||"

    mit den angegebenen 8 Wertepaaren.

    Danke



  • for(int i=0; i<read; i++)
    {
        printf("%X\n", buf[i]); 
    }
    

Anmelden zum Antworten