- Labornetzteil AliExpress         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 35

Thema: Warum: Vermeide Bit-Variablen! ??

  1. #1
    dl1akp
    Gast

    Warum: Vermeide Bit-Variablen! ??

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    habe im RN-Wiki den Artikel über Bascom gelesen.
    Dort steht bei Tips und Tricks: Vermeide Bit-Variablen!

    WARUM ??

    Ich benutze oft Bitvariablen als Flag für verschiedene Ereignisse.
    Was ist daran schlecht? Bis jetzt hat's immer funktioniert...

    Über eine Erklärung würde ich mich freuen.

    MfG,
    Andreas

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Ich würde sagen, dass der Grund hierfür der ist, dass ein Controller mindestens 8Bit Speicherplatz für eine Variable belegt, egal ob es sich um eine Bit-Variable oder eine Byte-Variable handelt. Daher ist eine Bit-Variable ineffektiv, da 7 Bits ungenutzt bleiben. Besser wäre es also, mehrere Flags in eine Variable zu packen und bei Verwendung zu maskieren. Dadurch wird der Code zwar schwerer lesbar, aber man spart ein paar Bytes an RAM.

    askazo

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    mann könnte ja auch die einzelnen bits der byte variable mit alias namen versehen, dann könnte man wieder "direkt" darauf zugreifen....

    gruss bluesmash

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    34
    Beiträge
    841
    Blog-Einträge
    1
    vielleicht ist es ja auch bloß eine glaubensfrage...wie die zulässigkeit vom goto befehl in basicprogrammen....

  5. #5
    dl1akp
    Gast
    Hallo,
    danke erst mal für die Infos. Das mit der Einsparung klingt logisch. Aber bei einem Mega32 oder gar Mega128 ein paar Byte einsparen.... naja...

    Die Sache mit den Goto-Befehlen ist mir allerdings genauso schleierhaft...

    dl1akp

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Zitat Zitat von dl1akp
    Die Sache mit den Goto-Befehlen ist mir allerdings genauso schleierhaft...
    Vergiss einfach die Antwort von dremler. Er liefert immer wieder solche Antworte. Mal abgesehen davon, dass es beim Goto-Befehl in Bascom noch keine Probleme gab und man diesen Befehl fast nie verwendet...

    jon
    Nice to be back after two years
    www.roboterfreak.de

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    46
    Beiträge
    178
    wenn man ein Bit deklariert geht zwar schon ein komplettes Byte dafür drauf allerdings belegt Bascom das nächste deklarierte Bit mit der gleichen Speicherzelle bis die 8 Bits "voll" sind! - so habe ich das jedenfalls mal aus dem Protokoll nach dem compilen rauslesen können!

    warum man das also vermeiden sollte ist mir auch nicht weiter bekannt.

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das Problem mit Bit's is weniger der Platz als der Prog-Code.
    Bits tauscht er immer über das T-Bit aus, das gibt z.B für das einfache Statement
    BIT.5 = 1
    eine ganze Menge Maschinen Befehle

    War schon öfter die Rede davon, ich werd' wohl einmal ein Demo in die Wiki stellen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Was ist ein T-Bit???

    jon
    Nice to be back after two years
    www.roboterfreak.de

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    Es ist hier ja auch nicht die Rede davon, das man etwas vermeiden sollte, weil es sonst nicht funktioniert, sondern weil es vorteilhafter ist, dieses und jenes zu vermeiden.

    Einzelne Bits zu setzen ist zu vermeiden, da - wie PicNick schon schrieb - Bascom dies recht umständlich realisiert, was größeren und langsameren Code erzeugt.
    Ein "goto" zu vermeiden ist eigentlich eher eine Frage der Eleganz und Lesbarkeit. Wer seine Programmstruktur mit vielen "goto"s versieht, der wird recht schnell nicht mehr durchsehen vor lauter Sprüngen und Sprungzielen. Die meisten Programmabläufe lassen sich gestalten ohne ein goto zu verwenden und werden dadurch, quasi als Nebeneffekt, eleganter, leichter lesbar und ab und zu auch schneller.
    Nochmal: funktionieren kann auch das heftigste Spaghettiprogramm mit hunderten von goto-Befehlen.

    @PicNick: deinen diesbezüglichen Wiki-Eintrag werde ich sicherlich auch mit größtem Interresse lesen. Marvin freu sich über jede Optimierung

    Eine Frage drängt sich mit aber gleich auf. Wie sieht es mit den Ports aus, ist das setzen einzelner Bits dort auch so langsam? (Müßte ja eigentlich, oder?)
    Und ists besser, die Ports immer als Byte komplett zu setzen anstatt einzelne Bits?
    <weitergrübel>
    Dann müßte man sich ja am besten eine Byte-Variable einrichten, deren Bits mit AND und OR gesetzt bzw. gelöscht werden und die dann komplett an den Port übergeben wird.
    Oder macht dieses Verfahren mehr umstand als es verbesserugn bringt?
    </weitergrübel>

    Den Bascom-Code zu optimieren ist ein Thema, zu dem es bisher noch meiner Meinung nach viel zu wenige Infos gibt. Ich bin gespannt, was da noch kommt!

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress