Forum: Compiler & IDEs Erklärung des Programmes/der Software


von Maximilian T. (maxunity24)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

kann mir jemand die einzelnen Befehle von meinem Programm erklären?
Alleine Copy & Paste bringt mich nicht weiter, auch wenn meine LED 
leuchtet,würde ich gerne wissen, was die einzelnen Befehle machen.

Grüße,
Max

von NSA (Gast)


Lesenswert?

Wie wäre es mit dem Tutorial hier? Mit nur einem Mausklick auf dieser 
Seite in der oberen Linken Ecke.

DDRC ...: setzt das 5. Bit im Register DDRC, PC4 wird Ausgang

PIND ...: Ist das 5. Bit in PIND gesetzt? Ist der Eingang high?

PORTC ...: Setzt bzw. löscht Bit 5 im PortC Register, Led an bzw. aus 
(je nach äußerer Beschaltung).

von Nilix (Gast)


Lesenswert?

in die main loop gehört kein return

von Peter II (Gast)


Lesenswert?

Maximilian Thümmel schrieb:
> kann mir jemand die einzelnen Befehle von meinem Programm erklären?

nein, wie sind zu faul aus einen Bild abzuschreiben.

Kannst du wenigsten C programmieren?

von NSA (Gast)


Lesenswert?

Nilix schrieb:
> in die main loop gehört kein return

Danke für die Anmerkung, ist im obigen Programm auch nicht der Fall.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Maximilian Thümmel schrieb:
> kann mir jemand die einzelnen Befehle von meinem Programm erklären?
Quellcodes enden nicht mit *.png!
Du kannst C-Code hier einbinden:
1
[c]
2
  C-Code
3
[/c]

> kann mir jemand die einzelnen Befehle von meinem Programm erklären?
Wenn es dein Programm ist, dann musst du dir doch was gedacht haben, 
als du die Zeilen hingeschrieben hast...

> würde ich gerne wissen, was die einzelnen Befehle machen.
Dort findest du einiges zum Thema:
https://www.mikrocontroller.net/articles/Hauptseite
Viele der Abkürzungen findest du dort:
https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
Und keine Angst: egal ob Assembler oder C, die Abkürzungen und Funktion 
der Register sind die selben...

von Peter D. (peda)


Lesenswert?

Nilix schrieb:
> in die main loop gehört kein return

Ist auch nicht.
Aber eine Funktion vom Typ "int" muß ein "return Wert;" haben.

Die meisten Compiler erkennen aber, wenn eine Funktion nicht terminiert 
und verzeihen dann das Fehlen der Returnanweisung.

von Peter II (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Aber eine Funktion vom Typ "int" muß ein "return Wert;" haben.

bis auf die ausnahme main bei c++

von Frank (Gast)


Lesenswert?

> Quellcodes enden nicht mit *.png!

Ach komm, bei der intellektuellen Leistungsfähigkeit unseres Nachwuchses 
muss man doch schon froh sein das kein verwackeltes Handy-BMP war. :-)

Frank

von Erklärer (Gast)


Lesenswert?

1
=
Zuweisung, weißt der Variable links davon den Wert rechts zu
1
for(;;)
For Schleife, in diesem Fall endlos
{
1
if()
If Abfrage: Führt den Folgendem Block bzw. Zeile nur aus wenn der Wert 
in der Klammer ungleich null ist.
1
|=
Zusammengesetzte Zuweisung a |= b; ist das Gleiche wie a = a | b;
1
|
Bildet das bitweise oder aus zwei Variablen bzw. Konstanten
1
else
Wenn der Ausdruck im if() gleich null war wird die Zeile bzw. Block 
unter dem else ausgeführt
1
&=
Zusammengesetzte Zuweisung a &= b; ist das Gleiche wie a = a & b;
1
&
Bildet das bitweise und aus zwei Varaiblen bzw. Konstanten
1
~
Bitweise Negation der Variable bzw. Konstante rechts davon.
1
return
Beendet die Funktion und gibt 0 zurück

von Erklärer (Gast)


Lesenswert?

Frank schrieb:
> muss man doch schon froh sein das kein verwackeltes Handy-BMP war. :-)
Wenn jemand es schafft hier ein Bitmap zu posten hat er sich meinen 
Respekt verdient...

von Rolf Magnus (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Nilix schrieb:
>> in die main loop gehört kein return
>
> Ist auch nicht.
> Aber eine Funktion vom Typ "int" muß ein "return Wert;" haben.

Nicht unbedingt. Es ist lediglich so, daß das Verhalten undefiniert ist, 
wenn ohne das return aus der Funktion zurückgesprungen wrid. Das 
passiert hier aber nicht.

> Die meisten Compiler erkennen aber, wenn eine Funktion nicht terminiert
> und verzeihen dann das Fehlen der Returnanweisung.

Es gibt auch Compiler, die in so einem Fall warnen, wenn da ein return 
steht. Da es nie erreicht werden kann, ist es toter Code, und solchen 
schreibt man ja in der Regel nicht mit Absicht hin.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter II schrieb:
> Peter Dannegger schrieb:
>> Aber eine Funktion vom Typ "int" muß ein "return Wert;" haben.
>
> bis auf die ausnahme main bei c++

Das ist inzwischen (d.h. seit ca. 16 Jahren) auch in C so, auch wenn ich
nicht verstanden habe, warum.

von Mark B. (markbrandis)


Lesenswert?

Yalu X. schrieb:
> Peter II schrieb:
>> Peter Dannegger schrieb:
>>> Aber eine Funktion vom Typ "int" muß ein "return Wert;" haben.
>>
>> bis auf die ausnahme main bei c++
>
> Das ist inzwischen (d.h. seit ca. 16 Jahren) auch in C so, auch wenn ich
> nicht verstanden habe, warum.

Na, an und für sich ist es doch konsequent? Die Funktion wurde so 
deklariert, dass sie einen Rückgabewert liefert. Also muss sie auch 
einen Wert zurückgeben.

Logisch richtig wäre es demnach, wenn man void main() deklarieren könnte 
(und dies korrektes C wäre) für den Fall, dass es ein Endlosprogramm für 
z.B. einen Mikrocontroller ist.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Mark Brandis schrieb:
>> Das ist inzwischen (d.h. seit ca. 16 Jahren) auch in C so, auch wenn ich
>> nicht verstanden habe, warum.
>
> Na, an und für sich ist es doch konsequent? Die Funktion wurde so
> deklariert, dass sie einen Rückgabewert liefert. Also muss sie auch
> einen Wert zurückgeben.

Da hast du mich verkehrt herum verstanden: In C, wie auch in C++, darf
die Return-Anwesiung in main weggelassen werden, obwohl die Funktion als
int deklariert ist. Das ist das, was mir nicht in den Kopf geht. Warum
wird hier wegen einer einzigen Zeile eingesparter Tipparbeit extra eine
Ausnahmeregelung eingeführt, die zudem unlogisch ist?

Mark Brandis schrieb:
> Logisch richtig wäre es demnach, wenn man void main() deklarieren könnte
> (und dies korrektes C wäre) für den Fall, dass es ein Endlosprogramm für
> z.B. einen Mikrocontroller ist.

Ja, so etwas wäre wesentlich sinnvoller.

von Karl H. (kbuchegg)


Lesenswert?

Yalu X. schrieb:

> Da hast du mich verkehrt herum verstanden: In C, wie auch in C++, darf
> die Return-Anwesiung in main weggelassen werden, obwohl die Funktion als
> int deklariert ist.

Die Regel geht noch weiter.
Fehlt der return, dann muss der Compiler einen
1
  return SUCCESS;
am Ende der Funktion annehmen. (SUCCESS ist ein Makro mit dem Wert 0)

> Das ist das, was mir nicht in den Kopf geht.

Diese Regelung hab ich auch nie verstanden.
Das man Altlasten im Standard mitschleppen will ist ja alles schön und 
gut. Aber jedem, der ein himmelaltes Programm neu durch den Compiler 
jagt, ist es meiner Meinung nach durchaus zuzumuten, dass
* der Returntype von main ein int ist
* er eventuell einen return am Ende von main ergänzen muss

Statt dessen hat man eine eigentlich simple Regel verwässert. Das 
versteh wer will.

von Mark B. (markbrandis)


Lesenswert?

Karl Heinz schrieb:
> Aber jedem, der ein himmelaltes Programm neu durch den Compiler
> jagt, ist es meiner Meinung nach durchaus zuzumuten, dass
> * der Returntype von main ein int ist
> * er eventuell einen return am Ende von main ergänzen muss

Vielleicht geht das nicht wegen des Fachkräftemangels? ;-)

von Jan (Gast)


Lesenswert?

Nilix schrieb:
> in die main loop gehört kein return

wieso ist main eine loop?

von Joachim B. (jar)


Lesenswert?

Jan schrieb:
> wieso ist main eine loop?

main ist kein loop, aber innerhalb vom main ist ein loop und normale 
Programme im im µC laufen ewig, wieso soll auch ein µC das Programm 
beenden?

Annahme µC überwacht Temperaturen und ruft Alarm bei Bedingung, das soll 
laufen solange der Strom hat und er lebt, wer sieht da ein Ende und 
wann, nach einem Durchlauf? nach einer Woche?

Deswegen unendlich for(;;) oder while(1)

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.