Archiv
Ansicht:   
Suche   erweiterte Suche

Nachricht aus dem Archiv

baeuchlein schrieb am 09.August.2009, 22:13:06 in der Kategorie pc.coding

... hmm ja, so ungefähr...

> > Ich würde eher sagen, dass die Variable ad als \"long\" definiert werden
> > müsste.
>
> Ich glaube nach längerer Überlegungen und probierens, habe ja in der
> Zwischenzeit weitergemacht, macht die Zeile
>
> ADN6 = (long) ad;
>
> genau das. Die Schreibweise sieht nur kompliziert aus.

Hm-hm, ich weiß nicht. Ich glaube (und was MudGuard Dir geschrieben hat, soll vermutlich dasselbe bedeuten), hier wird eben nicht ad selber verändert, sondern das, was dieser Ausdruck mit dem Inhalt von ad macht. Ich denke, es bedeutet Folgendes:

1. Schnappe Dir den Inhalt von ad.
2. Mache eine \"long\"-Zahl (32 Bit) daraus.
3. Speichere die in ADN6 ab.

Dieser \"cast\", von dem MudGuard da spricht, ist meines Wissens Schritt 2, also die Konvertierung des Wertes aus ad in eine \"long\"-Zahl. Als dritter Schritt kommt dann die Einlagerung dieser \"long\"-Zahl in ADN6.

Aber ich bin mir schon recht sicher, dass Du das im Prinzip auch erkannt hast. Nur die Konstruktion \"... = (long) ad\" kenne ich nicht, ich vermute halt nur, dass da aus dem Inhalt von ad eine 32-Bit-Zahl gebildet wird. Leider ist es dafür jetzt zu spät - in ad hätte von vornherein eine 32-Bit-Zahl \'reinpassen müssen. Da der Compiler aber entschieden hat, dass ad gefälligst eine 16-Bit-Zahl ist, wurden dort hinein auch nur die Bits 0 bis 15 der 32-Bit-Zahl aus dem A/D-Wandler gebracht. Die anderen 16 Bit sind ins Nirwana verschollen und werden der Menschheit auf immer verborgen bleiben. -seufz-

Programmieren kann ja so traurig sein! :crying:

> Aufgesplittet müßte das so aussehen womit es optisch nachvollziebarer
> aussieht.
>
> long ad;
> ADN6 = ad;
> maxlimit = 100*ADN6;
>
> wobei man dann eigentlich auch gleich schreiben könnte:
>
> long ad;
> maxlimit = 100*ad;

Sehe ich genau so. Hier wird das Grundproblem (ad hat durch des Compilers \"Eigenmächtigkeit\" eine falsche Größe abgekriegt und kann deshalb hohe Messwerte nicht mehr korrekt aufnehmen) direkt gelöst.

> Egal ob Du jetzt bei dem Programmschnipsel durch siehts oder nicht, wir
> beide meinten am Ende das Gleiche, also das ad \"long\" gesetzt werden muß,
> sonst funktioniert es nicht.

Genau. Sonst gehen die höherwertigen Bits schon beim Übertragen des Wertes aus dem A/D-Wandler unwiederbringlich verloren.

Edit: Hm, MudGuards neueste Antwort deutet darauf hin, dass ich da auch nicht ganz richtig liege... :kratz: ich meditiere mal drüber und melde mich ggf. im anderen \"Sub-Thread\"...
Archiv
Ansicht:   
Suche   erweiterte Suche
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz