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

Thema: Berechnung der Geschwindigkeit des µC und Frequenz?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.06.2004
    Ort
    Berlin
    Beiträge
    52

    Berechnung der Geschwindigkeit des µC und Frequenz?

    Anzeige

    Praxistest und DIY Projekte
    Wie berechne ich die Zeit für eine Rechenoperation, wenn ich die Frequenz gegeben habe?
    Z.B. ein 8Mhz µC soll diese Schleife ausführen:for(i=0;i<=100;i++); .
    Wie lange braucht er dazu?
    8MHz sind ja 8*10^6 /s . Heißt das, dass er in 1s/(8*10^6) eine Berechnung/Schritt durchführt?

    Gibt es unterschiedliche Zeiten für bestimmte Schritte?
    Das er vielleicht für das Addieren von zwei Variablen länger braucht als eine Variable + eine Konstante.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Für die Zeit sind die "Cycles" ausschlaggebend. je nach Befehl (siehe "Instruction set") braucht er einen oder mehrere.
    Wenn du also so eine for-Schleife berechnen willst, mußt du die generierte Assemblerbefehle (*.lss) nachrechnen.
    In einer uS macht er 8 Cycles, soweit hast Du mal recht.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2005
    Alter
    39
    Beiträge
    117
    http://www.avr-asm-tutorial.net/avr_...ner/index.html

    Hier findest du, welche Befehle wieviele Cycles brauchen.
    lg binaer
    Alkohol ist des Menschen grösster Feind!
    Doch in der Bibel steht geschrieben, du sollst auf deine Feinde lieben!

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo kautz

    gute frage, habs mahl ausgesucht, mochtes auch mahl verstehen

    for(i=0;i<=100;i++);

    compilieren und guck in die test.lst datei

    Code:
    // for(i=0;i<=100;i++); compiliert als:
    
    ldi r24,lo8(0)      //lade 0 in register 24
    .L6                 //sprung label
    subi r24,lo8(-1)    //substrahiere r24 mit -1 (selbe wie addierung mit +1) 
    cpi r24,lo8(100)    //vergleich r24 mit 100
    brio .L6            //spring zuruck nach L6 wenn niedriger
    
    ldi r24,lo8(0)      //1 clockcyclus
    .L6                 //0
    subi r24,lo8(-1)    //1 * 100 = 100 clockcyclus \
    cpi r24,lo8(100)    //1 * 100 = 100 clockcyclus  |<--- wird ja 100 mahl durchlaufen
    brio .L6            //1 * 100 = 100 clockcyclus /
    
    zusammen sind 301 clockcycles
    zusammen sind 301 clockcycles
    Ein clockcycle by 8MHz is 1/8us
    301 * 1/8 us = ongefahr 38us

    ist ja blitzschnell

    von diesen loops (for(i=0;i<=100;i++) kan mann 26000 stuck hintereinander programmieren und dafur braucht die processor nur eine secunde (!) um die alle 26000 aus zu fuhren

    wenn integer stat char benutzt wird mussen immmer 2 bytes addiert und verglichen werden und ich schatze dass wird ungefahr 4 bis 6 * 100 clockcycles extra daurn und machts mehr als zweimahl so langsam. (kanst du ja selbst ausprobiere/ausrechnen)

    gruss

    Henk

Berechtigungen

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

Solar Speicher und Akkus Tests