Sonstiges Libnodave daveReadBytes Verständnis Problem

msfreak

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

mittlerweile bin ich mit meinem Latein am Ende... Ich habe einfach ein Verständnis Problem mit der Funktion daveReadBytes.
Ich möchte mit daveReadBytes alle Ausgänge auf einmal aus lesen, scheiter aber an dem Auswerten des Ergebnis.

Es wird eine 0BA7 verwendet und programmiert wird in C.

Mein Versuch, der aber leider nur Mist ausgiebt:
Code:
           res = daveReadBytes(dc, daveOutputs, 0, 0, 2, NULL);

            if (res == 0){
                printf("A1: %d\n", daveGetU8(dc));
                printf("A2: %d\n", daveGetU8(dc));
                usw. ...
                ...
            }
            else {
                printf("No result found.\n");
            }

Bisher habe ich mit daveReadBits die Ausgänge ausgelesen, möchte aber das ganze etwas performater gestallten mit weniger abfragen.

Wie es bisher funktioniert:
Code:
for (i=0; i<=15; i++) {
    res=daveReadBits(dc, daveOutputs, 0, i, 1,NULL);
    if (res==0) printf("A%d: %d\n", i, daveGetU8(dc));
}

Kann mir jemand etwas auf die Sprünge helfen? Danke schon einmal im voraus.
 
Wenn du daveGetU8 aufrufst, erhälst du ein Byte vom puffer, d.h. darin sind due Zustände von 8 Ausgangs Bits
Das scheint nur bei DaveReadBits anderst zu sein!
Du musst dein Byt dann entsprechend maskieren
 
Code:
by8ausg=daveGetU8(dc);
bit0=(by8ausg and 1);
bit1=(by8ausg and 2);
...
bit7=(by8ausg and 128 ;

if(by8ausg and 1) bit0=1; else bit0=0;
...
if(by8ausg and 128 ) bit7=1; else bit7=0;
 
Danke für die Unterstützung, ihr habt mir geholfen.

So funktioniert der Code jetzt bei mir. Danke.

Code:
by8ausg = daveGetU8(dc);

if(by8ausg & 1) bit0=1;else bit0=0;
if(by8ausg & 2) bit1=1;else bit1=0;
...
if(by8ausg & 128) bit7=1;else bit7=0;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
if(by8ausg & 1) bit0=1;else bit0=0;
Wenn man schon in C programmiert, warum sucht man sich dann die absolut umständlichste, uneffektivste und fehleranfälligste Variante aus?
C besteht nicht nur aus IF, ELSE und Strichpunkt. C ist eigentlich dafür bekannt, das man sehr performant programmieren kann, wenn man die Programmiersprache beherrscht.

Code:
//dies ist schon eindeutig und ausreichend:
bit0 = by8ausg & 1;

//falls das als zu schwer lesbar aussieht, geht auch dies:
bit0 = by8ausg & 1 ? 1 : 0;

Harald
 
Im errsten Fall hätten bit0 ... bit7 0 oder den Wert des Bits (1...128), im zweiten Fall immer 0 oder 1. Da stellt sich die Frage, wie es gewollt ist.
 
Zurück
Oben