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