- LiFePO4 Speicher Test         
Ergebnis 1 bis 6 von 6

Thema: Shift bei Long

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Che Guevara Beitrag anzeigen
    An was kann das liegen?
    IMHO gilt nur bei positiven Zahlen, daß ein Right Shift einer Division entspricht.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Soweit ich das überblicke, kann man die Division einer ganzen Zahl wie eine LONG nur durch Shift right ersetzten, wenn der Divisor eine Zweierpotenz ist.

    "Shift _long_tmp , Right, 15, Signed" bedeutet eine Division durch 2^15 ( 32768 ) unter Beibehaltung des Vorzeichens. Damit kannst Du Divisionen durch 32768 ersetzten. Das funktioniert in Bascom Vers. 1.11.9.8 auch mit negativen Dividenden - zumindest im Simulator.

    Divisionen durch Zweierpotenzen finde ich aber in Deinem Code nicht. Wirst also andere Ergebnisse mit Shift als mit einer Division herausbekommen; also anderes Verhalten des Kopters.

    PS solche "Experimente" kann man gut im Simulator mit kurzen Testprogrammen machen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    IMHO gilt nur bei positiven Zahlen, daß ein Right Shift einer Division entspricht.
    Ok, dann muss ich wohl erst abfragen, ob die Zahl negativ ist oder nicht und anschließend wenn nötig erst positiv machen zum shiften.... Aber im Simulator hats auch mit negativen Zahlen funktioniert?! Mal wieder so eine Unwahrheit, die im Simulator zutage tritt? Ohne Signed ist das falsche Ergebnis im Simulator rausgekommen, mit Signed wars richtig?!

    Divisionen durch Zweierpotenzen finde ich aber in Deinem Code nicht. Wirst also andere Ergebnisse mit Shift als mit einer Division herausbekommen; also anderes Verhalten des Kopters.
    Ich weiß, dass das shiften um 15 einer Division durch 32768 entspricht! Deswegen hatte ich beim ausprobieren auch die Regler-Parameter verändert, sodass eigentlich das richtige Ergebnis rauskommen hätte müssen, sprich:
    Ich habe die erste Division durch 200 durch ein Shift 8 ersetzt und die anderen beiden Divisionen durch ein Shift 15.
    Dann habe ich die jeweiligen Parameter neu berechnet und eingesetzt. Jedoch funktionierts nicht..

    Gruß
    Chris

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hab trotzdem noch ein bißchen mit dem Simulator gespielt.

    Dort bringt ein Shift auf eine negative Zahl ein um 1 niedrigeres Ergebnis als die entsprechende Division, wenn die Division nicht ganzzahlig aufgeht.

    temp = -65536
    SHIFT temp , right , 15 , signed
    ergibt -2

    temp = -65536
    temp = temp / 32768
    ergibt auch -2

    aber

    temp = -65535
    SHIFT temp , right , 15 , signed
    ergibt -2

    temp = -65535
    temp = temp / 32768
    ergibt -1


    Also doch nicht so ohne weiteres ersetzbar


    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hm, also ob das Ergebnis um 1 kleiner ist oder nicht spielt hier keine so große Rolle! Im Simulator hat das ganze bei mir auch gefunzt, nur aufm AVR eben nicht?! Evtl. kann das ja mal jemand bei sich ausprobieren?

    Gruß
    Chris

Ähnliche Themen

  1. Shift-Daten an Fremdpin ausgeben
    Von hardware.bas im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 22.02.2011, 19:16
  2. Frage zu Shift Register
    Von Scarabol im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 23.10.2009, 06:31
  3. unsigned volatile long ??
    Von Ali_Baba im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 04.03.2009, 20:31
  4. Variable mit Shift Out übertragen
    Von BlaueLed im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 16.11.2007, 13:52
  5. Byte zu Long konvertieren
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 14.05.2006, 17:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen