INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Setup Loop warum?
10.09.2015, 07:49 (Dieser Beitrag wurde zuletzt bearbeitet: 10.09.2015 08:00 von HaWe.)
Beitrag #9
RE: Setup Loop warum?
ob da bei der Codeoptimierung ein paar Variablen raus"optimiert" wurden? Das passiert bei C u.U., wenn mit den Variablen (z.B. Zählvariablen u.a.m.) hinterher nichts mehr groß passiert - dann schmeißt sie der Compiler einfach raus.
Probiert doch mal das, jetzt bin ich auch gespannt!

ref.:
https://de.wikipedia.org/wiki/Volatile_%28Informatik%29
http://www2.informatik.uni-halle.de/lehr...volat.html

Code:
int main(){

  volatile uint32_t  i, b;  

  setup();
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);   // turn the LED on (HIGH is the voltage level)

  while(1) {
     b=0;
     digitalWrite(4, HIGH);   // turn the LED on (HIGH is the voltage level)
     for( i = 0; i < 2147483647 ; i++){   b++;}             // wait.. a little longer...?
     digitalWrite(4, LOW);    // turn the LED off by making the voltage LOW
     b=0;
     for( i = 0; i < 2147483647 ; i++){   b++;}             // wait
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.09.2015, 08:16
Beitrag #10
RE: Setup Loop warum?
(10.09.2015 07:49)HaWe schrieb:  ob da bei der Codeoptimierung ein paar Variablen raus"optimiert" wurden? Das passiert bei C u.U., wenn mit den Variablen (z.B. Zählvariablen u.a.m.) hinterher nichts mehr groß passiert - dann schmeißt sie der Compiler einfach raus.
....

Moin,
deswegen hatte ich in der Schleife ja auch das b++ als Beschäftigungstherapie reingeschrieben weil ich das weis und das darf der Compiler dann nicht wegwerfen...
Aber Thema durch..
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.09.2015, 08:26 (Dieser Beitrag wurde zuletzt bearbeitet: 10.09.2015 08:29 von HaWe.)
Beitrag #11
RE: Setup Loop warum?
auch das würde einer Codeoptimierung u.U. nicht entgegenstehen - denn es passiert ja auch mit b hinterher nichts. Also könnte (!) durchaus auch b++ rausfliegen (muss aber ntl nicht).
Verwende in solchen Fällen immer besser volatile... !

Und wie funktioniert jetzt meine Variante mit main() und volatile ?
wenn es hier nämlich immer noch nicht funzt, dann ist es ein Problem, das die Arduino IDE grundsätzlich mit einem nackten main() anstelle von loop() hat.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.09.2015, 08:31
Beitrag #12
RE: Setup Loop warum?
(10.09.2015 08:26)HaWe schrieb:  ...
Und wie funktioniert jetzt meine Variante mit main() und volatile ?
...

...probiers aus und berichte...Wink
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.09.2015, 09:23
Beitrag #13
RE: Setup Loop warum?
sieht so aus, als funktioniert euer Testcode weder mit main noch mit loop.
Dann ist das Thema auch für mich jetzt durch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.09.2015, 11:52
Beitrag #14
RE: Setup Loop warum?
Sleepy

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.09.2015, 15:41 (Dieser Beitrag wurde zuletzt bearbeitet: 10.09.2015 15:42 von HaWe.)
Beitrag #15
RE: Setup Loop warum?
hat mir doch keine Ruhe gelassen...

das funktioniert
Code:
void setup(){
     pinMode(13, OUTPUT);
}

void loop(){
  volatile uint32_t  i, b;

     b=0;
     digitalWrite(13, HIGH);   // turn the LED on  
     for( i = 0; i < 500000 ; i++){   b++;}             // wait..  
     digitalWrite(13, LOW);    // turn the LED off  
     b=0;
     for( i = 0; i < 500000 ; i++){   b++;}             // wait

}


und das hier genau so:
Code:
void setup(){  
}

int main(){
  volatile uint32_t  i, b;
  pinMode(13, OUTPUT);
  while(1) {
     b=0;
     digitalWrite(13, HIGH);   // turn the LED on  
     for( i = 0; i < 500000 ; i++){   b++;}             // wait..  
     digitalWrite(13, LOW);    // turn the LED off  
     b=0;
     for( i = 0; i < 500000 ; i++){   b++;}             // wait
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.09.2015, 09:13
Beitrag #16
RE: Setup Loop warum?
Moin.
@HaWe,
ich wollte schon schreiben du hättest gemogelt weil du die setup() Routine drin hast. Aber selbst die konnte ich rauswerfen und es ging immer noch...
Dann wollte ich es genauer wissen...
Code:
int main(){
//  uint32_t  i, b;
  long int  i, b;
  pinMode(4, OUTPUT);
  while(1) {
     b=0;
     digitalWrite(4, HIGH);   // turn the LED on  
     for( i = 0; i < 500000 ; i++){   b++;}             // wait..  
     digitalWrite(4, LOW);    // turn the LED off  
     b=0;
     for( i = 0; i < 500000 ; i++){   b++;}             // wait
  }
}
Wenn man anstelle uint32_t die Arduino Schreibweise long int verwendet ist es vorbei mit dem blinken...dann rast das Teil nur so durch...also irgendwo werden da dann die in Arduino üblichen Schreibweisen übergangen...ohne Fehlermeldung..
Sachen gibts....aber ist ja eh alles Allchemie...Big Grin
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste