www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Studio4 und while(1)?


Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe folgenden Code:

include "main.h"

  int main (void)
{

  init_mcu();

  SETBIT (PORTA,LED1);

  while(1)

  {;}

}


aber irgendwie springt der Simulator nicht in die While Schleife?
Warum?




Gruß

Knut

Autor: Michael Potthoff (mipo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wegoptimiert?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schreib mal eine
asm volatile ('nop');
rein.

PS: Die LED geht tretzdem nicht an. Du musst den Port noch auf Ausgang 
schalten.
SETBIT (DDRA,LED1);

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky schrieb:
> PS: Die LED geht tretzdem nicht an. Du musst den Port noch auf Ausgang
> schalten.SETBIT (DDRA,LED1);

init_mcu();

Michael Potthoff schrieb:
> wegoptimiert?

Ich hoffe nicht?!

Autor: DerAlbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso wird eigentlich immer behauptet, dass eine while(1)-Schleife 
wegoptimiert wird??
Auch wenn sie leer ist, stoppt die Programmausführung und macht 
nachfolgende Anweisungen unereichbar.
Es wäre ein grober Bug, wenn der Optimierer eine solche Schleife 
anfasst.

:-/

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur mal so am Rand:

Warum hat deine int main kein Return?

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim T. schrieb:
> Warum hat deine int main kein Return?

Warum sollte Sie einen return haben, klär mich auf?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat man mir auch schonmal um die Ohren gehauen.

Das ist C.
Ein main() hat immer eine int-Rückgabe und muss damit auch ein return 
haben.
Viele µC-Compiler ignorieren aber solche Fehler und weisen auch nicht 
durch eine Warnung drauf hin. Korrekt ist es trotzdem nicht.

Autor: Tim T. (tim_taylor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil du mit int main(void) der main-Funktion den Rückgabetyp int gibst.

Benutze einfach standartmäßig die Compileroption -Wall dann werden auch 
so Sachen angemeckert.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja.
Die C-Compiler optimieren auch nicht ohne Sinn und Verstand alles weg. 
Eine Endlosschleife (auch wenn dort nichts passiert) bleibt als solche 
enthalten. Der Optimierer kennt solche Konstrukte. Jedoch optimiert er 
danach alles weg was auf das while(1) folgt - klar.

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, is mir neu. Bi auch nicht sooo der Profi...

Sagt ma, der Simulator in AVR Studio is nicht ganz so toll oder?
Ich habe bis jetzt immer mit Programmers Notepad gearbeitet, nu
wollte ich ma etwas eleganteres probieren. Aber ich glaub ich bleib beim 
Notepad. Mit dem Simulator komm ich nach 2h immer noch nicht ganz klar.

Gruß

Knut

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie? Kann der Programmers Notepad auch AVRs simulieren? Wäre mir neu.

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian H. schrieb:
> Wie? Kann der Programmers Notepad auch AVRs simulieren? Wäre mir neu.

Kann es nicht, daher AVR Studio...

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du beschwerst Dich über den Simulator im AVR-Studio, weil Du nicht damit 
klarkommst. Aus diesem Grund bleibst Du beim Programmers Notepad.

Wo ist da die Logik? Oder meinst Du statt "Simulator" das Wort "Editor"?

Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wollte mal was anderes ausprobieren. Da mir der Simulator nicht 
gefällt, bleibe ich also erstmal beim PNotepad als Editor, da das Studio 
zu viel drum herum hat für einen Editor.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian H. schrieb:
> Das ist C.
>
> Ein main() hat immer eine int-Rückgabe und muss damit auch ein return
>
> haben.

falsch, es wurde in letzter zeit schon häufig diskutiert. Seit C99 
braucht man das return bei der main nicht mit hinzuschreiben.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem ist C keine Religion. Wenn meine main nunmal niemals 
zurückkehrt, dann schreib ich auch kein return hin. Weil sie nunmal 
nicht returnt. Und auch keine höhere Macht mich dafür bestrafen wird, 
dass sie kein return hat. ;-)

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus schrieb:
> Außerdem ist C keine Religion. Wenn meine main nunmal niemals
> zurückkehrt, dann schreib ich auch kein return hin. Weil sie nunmal
> nicht returnt. Und auch keine höhere Macht mich dafür bestrafen wird,
> dass sie kein return hat. ;-)

Nein keine höhere Macht, jedoch meterlange Threads aufgrund von 
Diskussionen über den Sinn und Unsinn korrektem (und damit portablem) 
C-Codes. Wenn das Return trotz "int main(void)" (das impliziert eine 
Rückgabe) nach C99 (also Standard) weggelassen werden darf, ist das ok.

Ist mir aber auch egal.

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.