Arrays [c++]

asorulez

Grünschnabel
Hier ein BSP (zum besseren Verständniss ;-) )

Durch einen Interrupt wird folgendes in einen FIFO geschrieben:

Optimalfall:

F9 A4 2B B1 20 F3 48 57 63 20 E6 00 00 00 08...(der Rest wird mit 00 gefüllt)
(Daten) (StW) (Daten) (StW) (Daten) (StW)


irgendein anderer Fall:

F9 A4 2B B1 15 F3 48 57 63 4 E6 00 00 00 00...(der Rest wird mit 00 gefüllt)
(Daten) (StW) (Daten) (StW) (Daten) (StW)

Der FIFO hat 160 BIT. Ich muss alle 32 BIT auslesen, weil danach das StatusWord kommt.
Nach jedem mal auslesen (alle 32 BIT) kommt ein StatusWord, welches 8 BIT hat,
wobei mich beim StatusWord nur die hinteren 5 BIT intressieren. Durch dieses StatusWord wird signalisiert welches der vorigen BIT OK ist.

zB: 0x20 --> alle 32 BIT sind OK!
zB: 0x08 --> ersten 8 BIT sind OK!


So.. nun zum Problem:

Wenn nicht alle 32 BIT OK sind, muss natürlich gestückelt werden.
Alle Daten werden in ein Array geschreiben. (auch die fehlerhaften). Jetzt müssen die Daten die brauchbar sind von den unbrauchbaren getrennt werden (mittels des StatusWords).
Wenn der "Schrott" weg ist, sollen die richtigen Daten in einem Stück in ein neues Array gespeicher werden.

Wie stell ich das am Besten an? Momentan bin ich dabei die Daten Bitweise herumzuschieben.....


Wenn etwas unklar ist....bitte FRAGEN

mfg aso
 
Hi asorulez,


versuch mal folgendes :

Code:
    fifoBuff[20];

    // Erstmal die gutenBytes in dem Array zählen ;-)
    int guteBytes = 0;
    for( int i = 4; i <20; i += 5 ) {
        BYTE status = fifoBuff[i];
        // Werte hier den Status aus und zähle die guten bytes
        if( blabla ) {
            guteBytes += xx;  // xx = Anzahl der guten bytes in den ersten 4 bytes
        }
    }
    // Dann das Zielarray erzeugen
    BYTE *zielArray = new BYTE[guteBytes];

    // Und dann die gutenBytes rüberkopieren
    for( int i = 4; i <20; i += 5 ) {
        BYTE status = fifoBuff[i];
        // Werte hier den Status aus und kopiere deine guten Bytes in das neue Zielarray
        if( blabla ) {
            *zielArray = fifoBuff[i-4];   // z.B. für das erste Byte
        }
        zielArray++;
    }

Keine Haftung, da code freihändig hier drin geschrieben wurde ;-)

Falls er es tut, bitte posten.

Schönen Gruß,

Peter

P.S. Wäre toll wenn in dem Editor hier die TAB-Taste funktionieren würde ;-)
 
Zuletzt bearbeitet:
Zurück