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


von Knut (Gast)


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

von Michael P. (mipo)


Lesenswert?

wegoptimiert?

von Matthias L. (Gast)


Lesenswert?

schreib mal eine
1
asm volatile ('nop');
rein.

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

von Knut (Gast)


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?!

von DerAlbi (Gast)


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.

:-/

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Nur mal so am Rand:

Warum hat deine int main kein Return?

von Knut (Gast)


Lesenswert?

Tim T. schrieb:
> Warum hat deine int main kein Return?

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

von Christian H. (netzwanze) Benutzerseite


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.

von Tim T. (tim_taylor) Benutzerseite


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.

von Christian H. (netzwanze) Benutzerseite


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.

von Knut (Gast)


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

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Wie? Kann der Programmers Notepad auch AVRs simulieren? Wäre mir neu.

von Knut (Gast)


Lesenswert?

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

Kann es nicht, daher AVR Studio...

von Christian H. (netzwanze) Benutzerseite


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"?

von Knut (Gast)


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.

von Peter (Gast)


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.

von Klaus (Gast)


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. ;-)

von Christian H. (netzwanze) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.