-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Warteschleife - Ich steh kurz vorm Wahnsinn

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607

    Warteschleife - Ich steh kurz vorm Wahnsinn

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Servus

    Wiedermal ich mit einer eigentlich einfachen Frage. Ich möchte hier klare Antworten sodass man das ganze dann in das Wiki stellen kann. Grund: Weder bei µC.net noch hier findet sich ein solcher Artikel und ich denke für den ein oder anderen könnte das Interessant sein.

    Nehmen wir mal eine verschachtelte Schleife aus 3 Zählern. Dann ist die Gesamtzeit am Ende, wenn ich mich nich Täusche, die dritte Wurzel aus den Zylklen mal der Taktzeit des Systems (1/Systemfreq.). Richtig/Falsch?

    Bei dieser Schleife
    Code:
    delay:								; Warte Schleife, Verschachteltes
    	ldi			zaehl3,0x8			; Incrementieren von 3 Zaehlern
    del2:
    	ldi			zaehl1,0xFF
    del:
    	ldi			zaehl2,0xFF
    del1:
    	dec			zaehl2
    	brne		del1
    	dec			zaehl1
    	brne		del
    	dec			zaehl3
    	brne		del2
    	ret
    aus dem Musterprogramm kommme ich auf
    Code:
    0x08 = 8
    FF = 255
    FF = 255
    => Cycles = 8*255*255 = 520200
               _______
    => t=³-\520200 * 1/4MHz = 20,1µs
    Problem: Ich sitz hier vorm PC wie ein Ochse und es tut sich, genua, nix. Er zählt die schleife und zählt und zählt und ... ja wie der Duracell-Hase ...

    Also, stimmt die Berechnung und die Simulation schlägt mir ein schnippchen oder steh ich auf der Leitung?

    BTW: Ich möchte das Tool aus dem Internet nicht nutzen! Diese Warteschleifen sind fürn Po, wofür gibts Timer, es geht mir nur um die Berechnung.

    Grüße

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die zahl dier Durchläufe ist das Produkt aus der Zahl der 3 Schleifen durchläufe. Um die Zeit zu berechenen muß man berücksichtigen, das die innere Schalife etwas schneller ist als die äußeren. Wenn mans genau wissen will am einfachsten erst innere Schleife berechen, dann nach außen weiter.
    Man muß noch die Zahl der Zykeln je schleifendurchlauf berücksichtingen. Hie also 3 für die innere Schleife. Also 3 mal so viel Zyklen, plus etwas für die äußeren Schleifen.

    Wie man auf die dritte Wurzel kommen soll wiess ich nicht, ich würde besser mit Pi * 113/355 mulitpizieren.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Das heist im Klartext (Formeln)?

    (255*255*+3 = Zeit oder Cycles?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Jau ich weis zwar jetz nich wieso aber okay. Komm ich auf ne Zahl. Der Proz macht 1/f = 1/4MHz Zyklen/s damit brauch ich für die gesamte schleife ~3s?

    Naja verwirrt war ich schon dank google, jetz blick ich goor nüscht mehr durch. Drecks Schleifen, Timer olé

    Edit: Jetz is der spaß weg ^^

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Irrtum vorbehalten

    8 * (3 + (255 * ( 3 + (255 * 3 - 1 ) - 1 ) - 1) -1) -1 = zyklen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    8*(die hyperbolische hypotenuse der raumzeitkonstanten+(3*255*5²³))?

    Tschuldige ich bin sau genervt heute und kann mir einen gewissen sarkasmus nich verkneifen

    Ich sachte KLARE Antworten, keine wirren formeln. Unter klar versteh ich auch eine gewisse begründung...

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    die Formel für die Laufzeit dieser 3-fach Schleife bei 4MHz ist:
    Z1*Z2*Z2*3/4000000
    (ohne den RET und unter der Voraussetzung das alle Z > 0 sind)

    Die Schleife braucht 8x255x255x3 Zyklen.
    Bei 4MHz dauert ein Zyklus 1/4000000s.
    Die Schleife dauert also insgesamt:
    8x255x255x3x(1/4000000) = 0,39015s.

    Woher kommt die 3 ?
    Hat mit der 3-fach Schleife nix zu tun, sondern:
    Der LDI und der DEC Befehl dauert je 1 Zyklus.
    der BRNE dauert 2 Zyklen, wenn die Bedingung erfüllt ist,
    sonst 1 Zyklus.
    Jetzt ein wenig Nachdenken und Kombinieren und wenn
    du erkennst warum der Wert exakt 3 ist, dann hast du
    eine Menge Assembler gelernt.
    Noch ein Tip: 1+(n-1)*(1+2)+1+1 = 3 + (n-1)*3 = n*3

    Gruß Jan

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Aaaah danke. Das hilft!

    Die 3 hatte ich so oder so im Sinn. Grund hast du genannt. Den BRNE Befehl hab ihc zwar noch nicht 100% Verstanden aber er "macht" ja das die Schleife vorwärts läuft wenn der eine Zähler abgelaufen ist.

    Beispiel: 50ms

    Z1*Z2*Z3*3/4000000 = t

    Ich setze Z1 und Z2 einfach mal auf 255
    => Z3=(t*4000000)/(Z1Z2*3) ~ 1
    Macht insgesamt 65025 Zyklen

    Passt?

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Sollte ungefähr passen.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    ja top danke Kann man das in die Wiki packen? Gibt vll noch andere die das quält, über google findet man nichts vernünftiges

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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