Forum: Compiler & IDEs gcc mit Eclipse bzw. AVRStudio / while-Schleife


von geno (Gast)


Lesenswert?

Hallo,

wenn ich mit Eclipse eine while(1) Schleife baue, so wird diese genau 
einmal durchlaufen, danach macht das Programm dann "irgendwas", aber 
läuft eben nicht weiter.

Das gleiche "Programm" (LED Lauflicht) in AVR Studio ebenfalls mit gcc 
kompiliert funktioniert wie erwartet.

"For" Schleifen funzen auch in mit Eclipse erstellten hexfiles.

Nun ist es ja so, dass beide IDEs auf die gleiche Toolchain zugreifen 
und ich hätte erwartet, dass bei Verwendung eines identischen Makefiles 
das Programm ein identisches Verhalten aufweist. Dem ist aber leider 
nicht so...


Hat jemand eine Idee?

Danke,
geno

von geno (Gast)


Lesenswert?

hmmmm....irgendwie habe ich es nun geschafft, dass die Schleife mit 
AVRStudio ebenfalls hängt :-/ Und das nicht nur mit ner while, sondern 
auch for-Schleife.
Auch ohne Makefile tut es nun nicht mehr - ich wüsste echt gern, warum 
das so ist.

thx for reading.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#ifndef F_CPU
4
#define F_CPU 16000000UL     
5
#endif
6
7
8
int main(void)
9
{
10
  DDRD = 0xFF;
11
  DDRB = 0x0;
12
  PORTD = 0xFF;
13
14
  for (int i = 1; i < 200000; ++i)
15
  {
16
    for (char LED = 0x0; LED < 8; ++LED)
17
    {
18
      _delay_ms(10);
19
      PORTD &= ~(1 << LED);
20
      _delay_ms(10);
21
      PORTD |= ( 1 << LED);
22
23
    }
24
    for (char LED = 7; LED >= 0; --LED)
25
    {
26
      _delay_ms(10);
27
      PORTD &= ~(1 << LED);
28
29
      _delay_ms(10);
30
      PORTD |= ( 1 << LED);
31
    }
32
  }
33
  return 0;
34
}

von Stefan E. (sternst)


Lesenswert?

1
for (int i = 1; i < 200000; ++i)
Wie soll i denn jemals die 200000 erreichen?

1
for (char LED = 7; LED >= 0; --LED)
Ob char ein Vorzeichen hat, hängt vom Compiler und den Optionen ab 
(der Standard legt das nicht fest). Wenn du AVR-Studio das Makefile 
generieren lässt, dann ist das auf jeden Fall eine Endlosschleife, denn 
dann wird mit -funsigned-char übersetzt.

Wenn du die Schleife unbedingt in der Form haben möchtest, dann so:
1
for (signed char LED = 7; LED >= 0; --LED)

von geno (Gast)


Lesenswert?

Moin Stefan,

danke für deine Antwort. Gerade eben habe ich herausgefunden, dass die 
Endlosschleife läuft, wenn ich in den Projekteinstellungen (Makefile 
habe ich rausgeschmissen) "unsigned chars" abschalte. Warum das 
aktiviert war - keine Ahnung...

Danke,
geno

von Engelbrecht (Gast)


Angehängte Dateien:

Lesenswert?

Halli Hallo,

Das ist wie beim Raucherproblem du musst einfach.

class A.N.A.L. implements Runnable {
      public void run() {
             for (int i = 65 ; i < 94; i++) { 
System.out.println(Thread.currentThread().getName() + " : " + (char) i) 
;
             try {
             Thread.sleep(1000); // pausiere eine Sekunde
             }
             catch (InterruptedException e) {
             System.out.println(e);
             }
             }

}

musst mal gucken

Kuss Engli

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.