Erklärung des Programmes/der Software

#4015233
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
Angehängte Dateien:
Gast #4015238
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).
Moderator (Firma: Titel) Persönliche Seite #4016107
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...
Gast #4016233
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
Gast #4016470
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.
#4017017
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.
Moderator #4017039
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.
#4017146
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.
#4030872
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren