- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 8 von 8

Thema: avr-gcc optimiert gleiche Ausdrücke weg - abstellen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Klebwax Beitrag anzeigen
    Das ist so nicht richtig.
    Doch, ist es.

    Zitat Zitat von Klebwax Beitrag anzeigen
    Der Compiler muß, wenn eine Variable volatile ist, damit rechnen, daß sie außerhalb des aktuellen Programmkontextes geändert werden kann.
    Nein. Er muss damit rechnen, dass auf sie außerhalb zugegriffen wird, egal ob schreibend oder lesend. Und das wiederum bedeutet, dass jeder Zugriff tatsächlich ausgeführt werden muss, auch schreibende.
    MfG
    Stefan

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von sternst Beitrag anzeigen
    Er muss damit rechnen, dass auf sie außerhalb zugegriffen wird, egal ob schreibend oder lesend. Und das wiederum bedeutet, dass jeder Zugriff tatsächlich ausgeführt werden muss, auch schreibende.
    Solange der andere Kontext nur liest, ist einmal schreiben gut genug. Aber:

    In C und C++ wird durch diesen Typqualifikator spezifiziert, dass sich der Wert der Variable jederzeit ändern kann, beispielsweise durch andere Prozesse oder Threads
    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Klebwax Beitrag anzeigen
    Solange der andere Kontext nur liest, ist einmal schreiben gut genug.
    volatile bedeutet, dass jeder Zugriff für den Compiler nicht einsehbare Seiteneffekte haben kann, und daher durchgeführt werden muss. Ob Schreiben oder Lesen spielt dabei keine Rolle. Es spielt auch keine Rolle, ob dieser "Seiteneffekt" nun ein anderer Software-Kontext ist, der ebenfalls auf die Variable zugreift, oder ob es ein Hardware-Effekt ist, weil die Variable in Wirklichkeit ein Register ist.

    Zitat Zitat von Klebwax Beitrag anzeigen
    Aber:
    In C und C++ wird durch diesen Typqualifikator spezifiziert, dass sich der Wert der Variable jederzeit ändern kann, beispielsweise durch andere Prozesse oder Threads
    Und? Nur weil etwas irgendwo steht, ist es noch lange nicht richtig. Das Zitierte ist jedenfalls mindestens unvollständig, um nicht zu sagen falsch.
    Geändert von sternst (14.01.2013 um 20:46 Uhr)
    MfG
    Stefan

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    An object that has volatile-qualified type may be modified in ways unknown to the implementation or have other unknown side effects
    Ok, mit side effects dürftest du recht haben. Je länger ich darüber nachdenke, meist schreibt man zwar auf einen Port oder Register aus einem Buffer, aber mehrere Male hintereinander die gleiche Konstante sollte durch volatile auch abgedeckt sein. Hab also zu schnell geantwortet

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Hmm, jetzt kenne ich mich selber nicht mehr aus:

    Gerade wollte ich einen Screenshot vom Oszi machen, wo gestern noch eindeutig zu erkennen war, dass der ganze Sinus besonders im Maximum und Minimung dreiecksförmig war, was ja eindeutig heißen würde, dass hier Ausdrücke wegoptimiert wurden (oder zumindest schneller ausgeführt wurden als andere, was aber sohl sehr seltsam wäre)

    Und ich schrieb wäre, weil:
    Jetzt ist der Sinus sinusförmig! Gleich noch einen kleinen Test geflasht, wo fünf mal aus und einmal ein stand: Tastverhältnis 1:5.
    Und ich verspreche, dass es gestern nicht so war, sonst hätte ich den Thread ja nicht gestartet. Ich hab auch nicht das falsche Makefile geändert, das ist alles gleich wie gestern. Villeicht der Neustart vom Computer?

    Peinlich jetzt natürlich, ich hoffe ihr seid mir jetzt nicht böse...

    Wie mir Klebwax empfohlen hat, werde ich es aber auf jeden fall einmal mit Assembler versuchen, das Programm ist ja nicht kompliziert, und sonst braucht der AVR ja nichts zu tun, Anzeige und so weiter möchte ich in einem Zweiten machen.

    Danke auf jeden Fall für eure Hilfe, ich werde berichten, falls sich doch noch etwas tut.

    Mfg Thegon

Ähnliche Themen

  1. [ERLEDIGT] Darf der Compiler das ??? (Kaputt optimiert)
    Von Siro im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 01.06.2011, 16:55
  2. Ausdrücke on/off als constanten nutzen?
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 23.10.2008, 06:47
  3. avr-gcc (GCC) 4.2.2 zu neu für Baselib?
    Von axel88 im Forum Robby RP6
    Antworten: 1
    Letzter Beitrag: 10.07.2008, 13:25
  4. AVR GCC: warning abstellen !?
    Von _maddin im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 08.07.2008, 20:24
  5. gcc-avr/avr-libc und FreeDOS
    Von pischke im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 14.10.2006, 09:56

Berechtigungen

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

Labornetzteil AliExpress