- LiTime Speicher und Akkus         
Ergebnis 1 bis 3 von 3

Thema: Variable in loop() - Denkblockade? Compiler-Bug?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80

    Variable in loop() - Denkblockade? Compiler-Bug?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Leute,

    habe eine Variable in loop() definiert und bekomme dafür eine Compiler-Warnung. So sieht der auf's Problem reduzierte Code aus:
    Code:
    void loop() {
    	int button; 
    	unsigned long browse; 
    //	browse = 0; 
    
    	button = GetButton(); 
    	if (button) { 							// Taster gedrückt?
    		switch (button) {
    
    			case KUP: 
    			browse = millis() + 8001; 
    			// Vorblättern
    			break; 
    
    			case KDOWN: 
    			browse = millis() + 8000; 
    			// Zurückblättern
    			break; 
    		}
    	} 
    }
    Die resultierende Warnung:
    C:\Eigene Dateien\Arduino\Eventlogger\Eventlogger.ino: In function 'void loop()':

    C:\Eigene Dateien\Arduino\Eventlogger\Eventlogger.ino:7:16: warning: variable 'browse' set but not used [-Wunused-but-set-variable]

    unsigned long browse;

    ^
    WIESO? Das mag ja nicht funktionsrelevant sein, aber ich will schon gerne einen Code ohne Warnungen produzieren!

    'browse' soll für einen Timeout (8s) verwendet werden, nach dessen Ablauf die Anzeige wieder auf Standardtext zurückgeschaltet wird. Eigentlich soll dieser Timeout für beide case-Bedingungen gleich sein (8000) - daß ich oben stattdessen 8001 verwende ist auch nur ein vergeblicher Versuch diese Warnung zu vermeiden. Ebenso wie die wieder auskommentierte Zeile 'browse = 0;' ...

    Wenn ich die Variable 'browse' global deklariere geht's, aber da gehört sie nunmal nicht hin. Zudem würde ich gerne verstehen was sich der Compiler dabei denkt wenn er sowas behauptet

    Gruß, Dieter

  2. #2
    HaWe
    Gast
    Zitat Zitat von cdk Beitrag anzeigen
    Hallo Leute,

    habe eine Variable in loop() definiert und bekomme dafür eine Compiler-Warnung. So sieht der auf's Problem reduzierte Code aus:
    Code:
    void loop() {
    	int button; 
    	unsigned long browse; 
    //	browse = 0; 
    
    	button = GetButton(); 
    	if (button) { 							// Taster gedrückt?
    		switch (button) {
    
    			case KUP: 
    			browse = millis() + 8001; 
    			// Vorblättern
    			break; 
    
    			case KDOWN: 
    			browse = millis() + 8000; 
    			// Zurückblättern
    			break; 
    		}
    	} 
    }
    Die resultierende Warnung:


    WIESO? Das mag ja nicht funktionsrelevant sein, aber ich will schon gerne einen Code ohne Warnungen produzieren!

    'browse' soll für einen Timeout (8s) verwendet werden, nach dessen Ablauf die Anzeige wieder auf Standardtext zurückgeschaltet wird. Eigentlich soll dieser Timeout für beide case-Bedingungen gleich sein (8000) - daß ich oben stattdessen 8001 verwende ist auch nur ein vergeblicher Versuch diese Warnung zu vermeiden. Ebenso wie die wieder auskommentierte Zeile 'browse = 0;' ...

    Wenn ich die Variable 'browse' global deklariere geht's, aber da gehört sie nunmal nicht hin. Zudem würde ich gerne verstehen was sich der Compiler dabei denkt wenn er sowas behauptet

    Gruß, Dieter
    hallo,
    browse werden zwar Werte zugewiesen, aber nichts damit weiter gemacht, daher löscht der Compiler diese Zeilen beim Optimieren heraus, und dann ist browse letztendlich komplett ungenutzt.
    Willst du vermeiden, dass die Zeilen herausoptimiert werden, deklariere browse als volatile,
    und wenn du darüberhinaus sicherstellen willst, dass der Inhalt auch in der nächsten loop Schleife noch vorhanden ist, zusätzlich als static:

    volatile unsigned long browse;
    volatile static unsigned long browse;

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Achso. Ich dachte wenn ich unterschiedliche Werte zuweise "mache" ich schon was damit. Dann wird sich die Warnung wohl im weiteren Code-Fortschritt wieder erledigen wenn "richtig" damit gearbeitet wird.
    Danke für die schnelle Antwort!

    Edit:
    Dann wird sich die Warnung wohl im weiteren Code-Fortschritt wieder erledigen wenn "richtig" damit gearbeitet wird.
    Ja - und so war's dann auch...
    Geändert von cdk (20.07.2019 um 10:28 Uhr)

Ähnliche Themen

  1. Denkblockade -> Restore data(variable)
    Von Andree-HB im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 19.05.2009, 19:45
  2. Seltsames Verhalten Variable FOR/NEXT + DO/LOOP
    Von stekohl im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 15.10.2008, 23:51
  3. DC|DC Messumformer! Denkblockade
    Von Fighter-2 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 06.02.2008, 21:23
  4. loop problem
    Von pinoccio im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 01.05.2006, 20:22
  5. Do Loop
    Von christian87 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 28.01.2005, 12:32

Berechtigungen

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

LiTime Speicher und Akkus