- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 23

Thema: sehr Kurze Warteschleifen für das korrekte Timing

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    @Klebwax:
    Das Problem Optimierung ist mir schon recht oft zum Verhängnis geworden.
    Genau in solchen Situationen wie Du eben beschrieben hast.
    Habe immer öfter bemerkt, dass ein "volatile" unumgänglich ist, damit der "schlaue" Compiler es auch "richtig" versteht.
    Am Anfang hab ich immer gemerkert warum der Compiler meinen Code klaut,
    Er hat ja recht würd ich aus heutiger Sicht sagen, woher soll er wissen dass......


    Ich hab grad noch etwas rumprobiert und da stellt sich gleich noch eine Frage:

    Zuvor der Code, der schien zu laufen.....
    Beim Timerüberlauf stimmt aber die Berechnung nicht mehr. Doch dazu später....

    Code:
    /*--------------------------------------------------------------------------*/
    /* static volatile U16 t_old; */
    
    inline void wait_us(U16 us)
    { U16 t_old;
    
      t_old = TIMER1_TC;
      while ((TIMER1_TC - t_old) < us) ;
    }
    /*--------------------------------------------------------------------------*/
    Nun zur Frage:

    Ich habe das Schlüsselwort "inline" benutzt, damit darf der Compiler den Code ja direkt einsetzen ohne einen Call.
    Ob er das macht bleibt glaube ich ihm überlassen.
    Damit ich meine Funktion evtl. sogar aus verschiedenen threads bzw. Interrupts aufrufen könnte, müsste mein Variable t_old ja Dynmsich auf dem Stack liegen, also Lokal zum Funktionsaufruf.
    Aber wie funktioniert das mit dem Inline, ist das überhaupt erlaubt ? Inline und lokale Variable ?

    Der Compiler könnte den Call nun sparen aber was macht er mit der Variable t_old ? die müste er ja dynamsich auf dem Stack verwalten.
    Wenn es um Geschwindigkeit geht und ich nur aus einem Thread die Funktion aufrufe, kann ich die Variable ja Global anlegen,
    ich vermute hier wird er den besten Code dafür erzeugen können.
    Geändert von Siro (24.06.2016 um 13:18 Uhr)

Ähnliche Themen

  1. Lipo-Ladegerät auf korrekte Funktion prüfen
    Von Che Guevara im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 17.03.2013, 10:51
  2. Korrekte Beschaltung eines Relais an einem AVR
    Von Björn im Forum AVR Hardwarethemen
    Antworten: 51
    Letzter Beitrag: 10.08.2009, 17:20
  3. Korrekte Schallmessung
    Von Dolfo im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 15.09.2008, 22:54
  4. Antworten: 3
    Letzter Beitrag: 18.01.2007, 21:10
  5. Warteschleifen bei ATMEL
    Von monoton im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 08.09.2004, 00:15

Berechtigungen

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

12V Akku bauen