www.mikrocontroller.net

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


Autor: geno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: geno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

#include <avr/io.h>
#include <util/delay.h>
#ifndef F_CPU
#define F_CPU 16000000UL     
#endif


int main(void)
{
  DDRD = 0xFF;
  DDRB = 0x0;
  PORTD = 0xFF;

  for (int i = 1; i < 200000; ++i)
  {
    for (char LED = 0x0; LED < 8; ++LED)
    {
      _delay_ms(10);
      PORTD &= ~(1 << LED);
      _delay_ms(10);
      PORTD |= ( 1 << LED);

    }
    for (char LED = 7; LED >= 0; --LED)
    {
      _delay_ms(10);
      PORTD &= ~(1 << LED);

      _delay_ms(10);
      PORTD |= ( 1 << LED);
    }
  }
  return 0;
}



Autor: Stefan Ernst (sternst)
Datum:

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

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:
for (signed char LED = 7; LED >= 0; --LED)

Autor: geno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Engelbrecht (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.