Warum funkt dieser simple Code nicht ?

Gast #1205406
Lesenswert?
• ▲
▼
1
#include <avr/io.h>
2

3
void main(void)
4
 {
5
   DDRB = 0xFF;
6
   DDRB &=~ (1<<PB7);
7
   PORTB |= (1<<PB7) | (1<<PB4);
8
  
9
   while(1);
10
   {
11
    if ( !(PINB & (1<<PB7)) )
12
    {
13
     PORTB &=~ (1<<PB4);
14
    }
15
   }
16
  }

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.
#1205420
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..
Gast #1205797
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.
Gast #1206095
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?

Antwort schreiben

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.

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.