- Labornetzteil AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 35

Thema: Warum: Vermeide Bit-Variablen! ??

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich hab' da noch ein paar Beispiele hinzugefügt. Vielleicht will wer gucken.
    Abgefeimte Assembler-Fuzzies bekommen da natürlich Tränen in die Augen, aber wat is, det is.

    https://www.roboternetz.de/wissen/in...de#BITVARIABLE
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    noch ein kleiner off-topic-Hinweis zu GOTO:
    Mit GOTO 0 kann man in Bacom den µC reseten, ist manchmal auch nicht verkehrt.

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.09.2006
    Alter
    34
    Beiträge
    841
    Blog-Einträge
    1
    hmm ich muss das nu noch mal ausgraben-.....weil ichs eben erst gesehen hab..


    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:

    woher nimmst du deine weisheiten?? das ich städig sowas schreiben würde?? außerdem gibt es auch leute die dieser befehl sehr wohl und auch oft verwenden.....also bist du es wohl der hier sachen schreibt die man vergessen sollte.....

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    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!
    Welche Möglichkeiten gibt es denn überhaupt den Erfolg irgendwelcher Optimierungsversuche festzustellen?

    Beim Compilieren zeigt der Compiler an, wieviel Speicher das Programm belegt. Das ist zwar ein Anhaltspunkt, da aber nur angegeben wird wieviel Prozent des Speichers das gesamte Programm belegt, ist es für kleinere Optimierungen in einem grüsseren Programm nicht besonders genau.

    Mit AVR Studio kann man den von Bascom compilierten Code durch den Disassembler jagen. Wenn man Assembler versteht, kann man dann natürlich sehen, was Bascom da zusammengebastelt hat.
    Wenn man - wie ich - kein Assembler versteht, kann man höchstens die Zeilen zählen. Wenn man das nach jeder kleineren Änderung macht um den Erfolg festzustellen, ist das aber auch recht mühsam.

    Wiwviel Speicvher das gesamte Programm belegt oder wieviel Zeilen Assemblercode Bascom daraus macht ist ja auch oft gar nicht so wichtig.

    Intreressanter ist es oft bei einzelnen Routinen die häufig, oder sogar per Interrupt aufgerufen werden.
    Welche Möglichkeiten gibt es denn da, festzustellen was Bascom daraus macht.
    Oder anders gefragt, wie kann ich feststellen wieviel Takte der Controller z.B. für meine Interrupt-Routine benötigt, und ob der Optimierungsversuch überhaupt ewas gebracht hat?

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    ...kann man höchstens die Zeilen zählen
    Assemblerzeilen zählen bringt nur wenig.
    Ausser wenn es nur um den Flash-Verbrauch geht.
    Wenn es um die Geschwindigkeit geht,
    ist oft ist der längere Code sogar der schnellere.
    Stichwort: Ausrollen von Schleifen

    Gruß Jan

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    @JanB jupp, das Ausrollen kleinerer schleifen kann sinnvoll sein, ebenso zu nennen wären vielleicht noch:

    - überprüfen ob dinge doppelt oder unnütz berechnet werden
    - überprüfen, ob funktionen oder werte nicht als tabelle im speicher vorab abgelegt werden können
    - möglichst subs oder funktionen vermeiden, sondern gosub verwenden

    Eine Möglichkeit, die Erfolge von Optimierungen zu überprüfen ist, am Anfang des betreffenden Codes einen Counter zu starten und diesem an Ende des Codes auszulesen.

    @dremler: sicherlich funktioniert der goto-Befehl absolut zuverlässig, aber ich habe bisher noch keinen Programmcode mit vielen gotos gesehen, den man nicht viel eleganter und besser lesbar ohne 95% der gotos hinbekommen kann.
    Ein gutes Listing/Programm kommt deshalb ohne viele gotos aus. Ich hab mal nachgeschaut - in meinem Programm für Marvin gibt es maximal 1 oder 2 gotos, und das bei mehr als 10.000 Programmzeilen. Mit vielen Sprüngen wäre das Lesen und Verstehen so eines Codes wohl auch kaum noch möglich.

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

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    35
    Beiträge
    967
    Wenn man ASM gewohnt ist, dann benutzt man vllt. auch in Bascom Gotos... ich hab in Bascom diesen Befehl zwar auch noch nicht verwendet, aber jedem das seine. Man sollte hier nicht verallgemeinern. Die einen hassen, was die anderen lieben.
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    In ASM kommt man ja ums Springen nicht herum, wenn auch die meisten Sprünge bedingte Sprünge sind, deren Basic-"Gehaltsequivalent" ich eher in einem "IF" als einem "Goto" sehe.

    Klar, jeder kann natürlich programmieren, wie ihm/ihr beliebt. Man kann seine Suppe auch mit einer Gabel löffeln, sollte aber nicht versuchen, andere von den Vorzügen zu überzeugen
    Mein Hexapod im Detail auf www.vreal.de

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Assemblerzeilen zählen bringt nur wenig.
    Ausser wenn es nur um den Flash-Verbrauch geht.
    Das ist mir eigentlich klar, daher habe ich ja gefragt, wie man bei einzelnen Routinen feststellen kann wie schnell (in wieviel Takten) diese ausgeführt werden.

    - überprüfen ob dinge doppelt oder unnütz berechnet werden
    Die Gefahr ist bei einem grösseren Programm sicherlich gegeben.
    Dass man das selber prüfen muss und die Entscheidung welche Programmteile unnütz sind nicht irgendeinem Tool oder dem Compiler überlässt, finde ich aber eigentlich ganz OK

    - überprüfen, ob funktionen oder werte nicht als tabelle im speicher vorab abgelegt werden können
    Das wird vermutlich erst ab einer gewissen "Komplexität" der Funktionen Vorteile bringen und wenn ich da richtig liege, ist es halt hilfreich, wenn man den Erfolg auch prüfen kann.

    - möglichst subs oder funktionen vermeiden, sondern gosub verwenden
    OK, das ist mir neu. Kommt mir aber entgegen, da ich eigentlich immer zu faul war Subs und Funktionen zu nutzen und mir das erst in diversen Codeschnipseln und Beispielprogrammen abgeguckt habe.

    Eine Möglichkeit, die Erfolge von Optimierungen zu überprüfen ist, am Anfang des betreffenden Codes einen Counter zu starten und diesem an Ende des Codes auszulesen.
    Ich habe es mal über nen Zähler in einer Interrupt-Routine versucht, dabei aber irgendwie so rumgemurkst, dass nichts sinnvolles dabei rauskam.
    Einen Counter zu verwenden ist ein guter Plan

    Reicht es, wenn man das im Simulator macht oder pfuscht da das seltsame Verhalten von Windows rein?
    Um die Takte über einen Counter zu zählen sollte ja eigentlich der Simulator reichen und das Multitasking von Windows keine Rolle spielen.

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    30.12.2006
    Beiträge
    57
    mein Dank an PicNick - sehr schön die Bsp.
    mir kommen die Tränen bei der PortPin abfrage.
    tschüß sc
    Its not a bug its a feature

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen