- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 7 von 7

Thema: BASCOM / ASSEMBLER mit "Humpelpause"

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2007
    Beiträge
    10

    BASCOM / ASSEMBLER mit "Humpelpause"

    Anzeige

    Praxistest und DIY Projekte
    Hi
    Ich habe einen Assembler-Code, eingebettet in Bascom geschrieben, der nur funktioniert, wenn der Sprungbefehl (BRSH) eine "Humpelpause" einlegt!!!

    Wenn zwischen BRSH und dem anzuspringenden Label viel Code steht (so um die 60 Zeilen) erscheint nach dem Compilieren die Fehlermeldung:
    - Error: 220 / Forward jump out of Range

    Wenn jedoch zwischen BRSH und dem anzuspringenden Label "Humpelpause:"
    nur wenig Code steht (so um die 30 Zeilen) und hier eine zweite BRSH-Prüfung mit den selben Registerwerten erfolgt, mit denen die Humpelpause erreicht wurde, kann man gut und gerne weitere 30 Zeilen springen. - Und das Programm läuft wie gewünscht !!!

    Die Anzahl der überspringbaren Zeilen ist etwas Code abhängig:
    Wenn hier der Befehl
    - LOADADR Irgendwas, X
    steht, sind mehr Zeilen möglich als bei
    - LOADADR Irgendwas(INDEX), X

    Wenn zu oft "LOADADR Irgendwas(INDEX), X" steht, müssen die Humpelpausen weniger Code-Zeilen beinhalten, sonst gibt es wieder Error: 220



    Ich habe mal den SoftwareStack erhöht, das bringt aber nichts.

    Hat jemand eine Idee gegen Humpelpausen-Programmierung ???

    Danke im Voraus

    NLB

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ja, Kollege, da hilft nur die "Instruction-Set" PDF, wo jeder Befehl klitzeklein beschrieben ist.
    BRSH ist ein Befehl, der nur maximal +/- 63 Worte weit springen kann.
    Die meisten (alle?) bedingten Sprungbefehle haben diese Eigenschaft. Dafür belegen diese Befehle aber auch nur 1 Wort (=16Bit = 2 Byte)

    Man muß die Logik umdrehen:
    Statt:
    Code:
        BRSH  groesser_gleich 
    kleiner_als:
        ....
        ....
    
    
    groesser_gleich:
        .....
    Schreibt man
    Code:
        BRLO  kleiner_als     ; umgedrehte bedingung
        JMP     groesser_gleich 
    kleiner_als:
        ....
        ....
    
    
    groesser_gleich:
        .....

    Solche Schmankerl sind Gewohnheit, keine Sorge
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2007
    Beiträge
    10
    Das funktioniert, Danke

    Und wieder gilt:
    --> Ach, was wäre ich ohne Robert vom RoboterNetz ???!!!


    Hast Du auch noch einen Trick für:
    lds r22, {Irgendwas(index)+2}

    oder geht das nur über:
    Loadadr Irgendwas(index) , Y
    ld r20, Y+
    ld r21, Y+
    ld r22, Y+
    ld r23, Y+

    Der Loadadr braucht 13 Cyklen - und das macht lahm !!!


    mfg NLB

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ja, solche Befehle kosten, so direkt und einfach kann man da auch mit Assembler wenig machen:
    tabelle1(Index1) = tabelle2(Index2)
    sowas geht ins Blut und in die Cyklen.

    Im Assembler zieht man solche Sachen von vornhinein etwas anders auf, auf jeden Fall individuell, je nach Problemstellung.
    Da gibts keine allgemein gültigen Tricks.

    Vergiss nicht:

    "irgendwas(Index)+2" heisst ja

    addresse "irgendwas" + ( index - 1 ) * tabellen-element-länge + 2

    Wobei ja addressen mit 2 Byte=16 Bit gerechnet werden müssen.


    btw: aufpassen mit Indizes:
    Bascom rechnet immer von 1-nn und nicht 0-nn
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    warum proggst du nicht gleich in c?
    Bascom erzeugt keinen effektiven code, warum bemühst du dich dann um einpaar µs wenn das Bascom deine arbeit wieder versaut.

    .....Der Loadadr braucht 13 Cyklen - und das macht lahm !!! .....

    lol....nach 2 bascomzeilen ist deine µs wieder im eimer..

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2007
    Beiträge
    10
    Danke Picknick
    Jetzt bin ich richtig stolz auf mich;
    hatte heute Nacht ich einen Gedankenblitz und lese heute Morgen in Deinem Hinweis, daß ich das mit dem Adressen-Offset offenbar schon richtig interpretiert hatte. --> das wird jetzt ausprobiert !
    Deine Beiträge sind wirklich von hoher Substanz !!!

    Und somit beantwortet sich auch der glorreiche Hinweis vom RoboterHeld:
    Er erinnert an die Geschichte vom Dübel und dem Bohrer.
    Fragt einer im Baumarkt nach einem 10er Dübel und einem Bohrer hierzu.

    Sagt die Verkäuferin (blond?):
    Hier ist der Dübel, einen 10er Bohrer habe ich nicht; nehmen Sie doch einen 6er und einen 4er - das macht zusammen auch 10.

    Sagt der Kunde (auch blond!):
    Gut, aber dann nehme ich lieber zwei 5er, dann geht das Umspannen schneller.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    du begreifst es nicht? das winavr-c meine ich.

    ...Ich habe mal den SoftwareStack erhöht, das bringt aber nichts. ....

    die bascom-hilfe lesen, dann weisst du, das der s-stack damit nichts zu tun hat. datenblätter lesen und proggen lernen.

Berechtigungen

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

LiFePO4 Speicher Test