gcc mit Eclipse bzw. AVRStudio / while-Schleife

Gast #1032547
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.