gcc mit Eclipse bzw. AVRStudio / while-Schleife

Gast #1032547
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
Gast #1032689
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
}
#1032721
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)
Gast #1032743
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
Gast #1043777
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren