Warum wird main nicht bis zum Ende durchlaufen ?

Gast #285755
Lesenswert?
• ▲
▼
Hallo zusammen,
ich sitze an einem Programm auf einem ATMega128,
PC-Entwicklungsumgebung, gcc, Studio4 etc. Durch Zufall ist mir beim
Siglestep-Betrieb ein Fehler aufgefallen, für den ich keine Erklärung
habe.

Das Programm läuft ind Endlosschleife for(;;), führt die
switch-Anweisung aus, macht dann die Abfrage if (terminal_zeichen !=
0x00 ) terminal() ; und läuft dann aber nicht weiter zum lebenszeichen,
sondern springt zurück auf die switch-Anweisung.

Warum, was mache ich falsch ?

...und warum bekomme ich eine warnig, wenn ich ohne Rückgabewert
arbeite, also void main (void) statt int main (void) ?

Danke ! ...und hier der Code:

int main (void)

......

/* HAUPTSCHLEIFE: Run forever */
for (;;)
{
switch ( taste )
  {
  case taste_video: taste_vid_gedrueckt () ; break ; /* Video */
  case taste_audio: taste_aud_gedrueckt () ; break ; /* Audio */
  case taste_system: taste_sys_gedrueckt() ; break; /* System */
  case taste_status: taste_status_gedrueckt();break; /*Status */
  case taste_links: taste_li_gedrueckt () ; break ; /* LINKS */
  case taste_up: taste_up_gedrueckt () ; break ;   /* UP */
  case taste_down: taste_dwn_gedrueckt () ; break ; /* DOWN */
  case taste_rechts: taste_re_gedrueckt() ; break ; /* RECHTS */
  case taste_esc: taste_esc_gedrueckt () ; break ; /* ESC  */
  case taste_ent: taste_ent_gedrueckt () ; break ; /* ENT  */
default: ; /* Fehlerbehandlung */

} /* switch */

  if (terminal_zeichen != 0x00 ) terminal() ;

lebenszeichen = lebenszeichen + 1 ;

if ((lebenszeichen = 0) && (led_encode_ist_an = 0xFF))
  {  led_encode_ist_an = 0x00 ;
    led_encode_aus () ;  }

if ((lebenszeichen = 0) && (led_encode_ist_an = 0x00))
  {  led_encode_ist_an = 0xFF ;
    led_encode_an () ;  }

  }  /* Ende for (;;)  */

return 0 ; /* um Compiler-Warning zu unterdrücken */

} /* end of main  */
Gast #285756
Lesenswert?
• ▲
▼
Das Problem ist die Wertzuweisung "lebenszeichen = 0" statt der
logischen Abfrage "lebenszeichen == 0" und dito bei der Abfrage des
LED Zustands.

Die Wertzuweisung xyz = 0 hat immer den logischen Wert 0 und der if
Fall ist an dieser Stelle schon entschieden...

Gruß
Stefan
Gast #285759
Lesenswert?
• ▲
▼
Die neuen WINAVRs sind eigentlich sehr geschwätzig, da muß man schon

if ( (bla = 0) )

schreiben, damits keine Warnung gibt.

Aber leider gucken viele nur, ob ein Hex-File entstanden ist und
überlesen Warnungen einfach.

Warscheinlich muß jeder erstmal 14 Tage umsonst debuggen ehe er
Warnungen ernst nimmt.


Peter
Gast #285760
Lesenswert?
• ▲
▼
An alle !

...peinlich, peinlich ! Ich dachte ich hab' genau geguckt und hab'
den Fehler in einer ganz anderen Richtung gesucht:

Meine Ausrede: bin 57 Jahre und habe erst vor 3 Monaten mit C/WinAvr
angefangen.

Danke an alle !

Otto ; // Semikolon nicht vergessen !!

(Irgendwann bin ich gut genug, auch Antworten schreiben zu können)

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