Meine Frage wurde eine gute Stunde vor Deinem ersten Post vollstaendig beantwortet. (Ist nicht boese oder unfreundlich gemeint)Zitat von McJenso
Ich vermute, dass Du mit den beiden Codeschnipseln jene aus meinem ersten Post meinst.
Sternst sagte, dass ich vermutlich PORTA als Eingang definiert habe und einen Fehler in meinem Programm habe. Daraufhin habe ich gesucht, wie ich den Port als Ausgang definiere und konnte mein Problem mit DDRA = 0xff; loesen. Um anderen diese Suche zu ersparen, habe ich schnell noch einen (nicht funktionierenden) vorher Code und einen (funktionierenden) nachher Code geschrieben und mich bei Sternst bedankt.
Dann hast Du mich auf Fehler in meinem Code aufmerksam gemacht (keine Endlosschleife am Ende + kein return). Da avr-gcc keine Warnings beim Compile ausgegeben hat, habe ich mich gefragt, ob es wirklich falsch ist, beides wegzulassen. Um das herauszufinden habe ich nach nem disassembler gesucht und mir den Assemblercode von meinem urspruenglichem (dem "nachher" Code) angesehen. Heraus kam, dass der Compiler automatisch am Ende des main-Codes eine Endlosschleife erzeugt (rjmp .-2). Folglich erzeugt der Compiler von selbst am Ende meines Codes eine Endlosschleife, muss ich also nicht selbst machen.
Bleibt noch das return. Habe den Ausgangscode genommen und ein return 0; eingefuegt und wieder durch den disassembler gejagt. Wie ich bereits vermutete hat der Compiler das return einfach nicht uebersetzt (warum sollte der Compiler etwas fordern, das er nicht uebersetzt?). Daraufhin habe ich noch einen weiteren Code geschrieben, der main als void definiert (natuerlich ohne return). Compiler hat ein Warning ausgegeben, aber wieder den gleichen Assemblercode erzeugt.
Auf Systemen, die mehr als ein Programm beherbergen, macht es selbstverstaendlich Sinn, return hinzuschreiben, um dem nachfolgenden Programm mitzuteilen, ob das vorhergehende Programm erfolgreich oder nicht erfolgreich abgeschlossen wurde. Da dies auf einem AVR ehr nicht der Fall ist bzw alles in einem Programm ist, ist ein return 0 nicht notwendig.
Ofenrohr
Lesezeichen