mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warum funkt dieser simple Code nicht ?


Autor: Rush (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>

void main(void)
 {
   DDRB = 0xFF;
   DDRB &=~ (1<<PB7);
   PORTB |= (1<<PB7) | (1<<PB4);
  
   while(1);
   {
    if ( !(PINB & (1<<PB7)) )
    {
     PORTB &=~ (1<<PB4);
    }
   }
  }

Warum funzt dieser idiotensichere Code nicht???
Es soll nur eine LED an PB4 eingeschaltet werden sobald der Taster an 
PB7 gedrückt wird. Er schaltet gegen Masse.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau dir doch mal den Assembler-Code an, den der Compiler aus deinem 
Programm macht...

Autor: Rush (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Wie mache ich das im AVR-Studio?
2. Ich versehe eigentlich nichts von Assembler ;-)
3. Zusatz: Das ganze passiert auf einem STK500
4. Zusatz: Controllertyp ATtiny2313

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

steht doch da: "  while(1);"

Mach das ";" weg dann solte es doch gehen ?

Gruß

Andreas

Autor: Rush (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man.... das ; hatte ich übersehen.... scheisse...
Also danke Andreas, geht doch :-)

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rush wrote:
> 1. Wie mache ich das im AVR-Studio?

einfach mit einem Text-Editor die erzeugte .lss-Datei öffnen

> 2. Ich versehe eigentlich nichts von Assembler ;-)

ich auch nicht wirklich, aber gerade bei so Sachen hilft es...und es 
sind ja nur ein paar Zeilen...

auch ohne Assembler-Kenntnisse solltest du sehen, dass deine IF-Abfrage 
den Compiler gar nicht überlebt, weil der checkt, dass du nie bis da hin 
kommst..

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klasse gesehen. Hab den Code auch studiert, aber überlesen.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hab den Code auch studiert, aber überlesen.

Ich ebenfalls, manchmal kann einem C in den Wahnsinn treiben, zwar muss 
man nur wenig schreiben, aber dafür kann man auch gerne mal was 
übersehen...
Kürzlich ist mir passiert, dass ich beim Code herumkopieren nach einer 
If-Anweisung den nachfolgenden codeblock nicht in Klammern gepackt 
hatte, dann war natürlich nur die eine, nachfolgende Zeile vom If 
betroffen. Habe lange gesucht, denn der Codeblock war richtig 
eingerückt.

Autor: jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>auch ohne Assembler-Kenntnisse solltest du sehen, dass deine IF-Abfrage
>den Compiler gar nicht überlebt, weil der checkt, dass du nie bis da hin
>kommst..

kann man dem GCC eigentlich irgendwie sagen, dass er warnen soll, wenn 
code nie erreicht wird oder aus anderen gründen was wegoptimiert wird?

Autor: jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rtfm...

-Wunreachable-code

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.