- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: sehr Kurze Warteschleifen für das korrekte Timing

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Anzeige

    Powerstation Test
    Hallo Siro,
    Zitat Zitat von Siro Beitrag anzeigen
    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.
    Genau so ist es.

    Zitat Zitat von Siro Beitrag anzeigen
    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 ?
    Man kann in jedem Block heute eine lokale Variable festlegen, OK, bei K&R war das noch nicht erlaubt.

    Code:
    void function(void)
      {
          int i;
          // mach was mit i
            {
                int i2;
                // mach was mit i und i2
            }
          // ab hier gibt es i2 nicht mehr
          // mach noch was mit i
      }
    Zitat Zitat von Siro Beitrag anzeigen
    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.
    Vermutlich wird der Compiler die einzelne Variable gar nicht auf dem Stack ablegen, sondern in einem Register behalten.
    Kommt aber auf die CPU und den restlichen Code an.

    Es gibt noch das Keyword register, damit konnte man dem Compiler nahelegen, welche Variablen, wenn möglich, in einem Register abgelegt werden sollen. Das war so eine "per Hand" Optimierung. Heute hat register keinen praktischen Wert mehr, der Compiler optimiert dies automatisch.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Guten Morgen und Danke Peter.

    Nanu, da bin ich jetzt echt erstaunt, mit den "Block Lokalen" Variablen.
    Das ist mir völlig neu... Ist das Ansi/C99 konform ?
    Muss ich mal probieren, der Compiler müsste ja dann bei einem Verstoß meckern.

    Ich denke auch, bei solchen Ein/Zweizeilern wird der Compiler das automatisch in den Registern halten.

    Siro

  3. #23
    HaWe
    Gast
    ja, das mit den Blockvariablen ist 100% ANSI C99.

    Der C-Compiler wird die Variablen aber nur in den exe-Code übernehmen, wenn du mit ihren Werten auch irgendetwas machst (z.B. printf() Ausgabe). Wenn du nur rechnest, ohne mit den Ergebnissen was zu machen, fliegen sie komplett raus beim Kompilieren.
    Nur das Zauberwörtchen
    volatile
    vor der Variablendefinition kann dich vor dieser Optimierung (egal welches Optimierungs-Level) schützen, also wundere dich nicht, wenn du sie eventuell nicht im exe-Code wiederfindest!

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

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

Berechtigungen

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

LiFePO4 Speicher Test