Hallo zusammen, bin noch ziemlich neu in der Mikrocontrollerwelt und hab mir nun mal eure Seite angesehen und versucht ein paar kleine Programme in ASM umzusetzten. Mein Problem liegr beim Programmaufbau. Ich hab das so verstanden. Erstmal kommen includes und Definitionen usw. Danach ein paar Funktion und meistens erst später das Hauptprogramm. Aber woher weiß der Controller wo der Einsprungpunkt im Programm ist, ist das das Schlüsselwort main? Weil ich auch schon Programme gesehen habe wo das "Haupt:" heißt... Vielen Dank schon mal für eure Antworten
> Aber woher weiß der Controller wo der Einsprungpunkt im Programm ist, Das ist zwischen Przessorhersteller und Programmierer vereinbart und steht im Datenblatt. Beim AVR z.B. wird mit dem Befehl begonnen, der an Adresse 0 im Programmspeicher (Flash) steht. Damit auch Interrupts verarbeitet werden können, sind die folgenden Adressen als Einsprung für die Interrupts reserviert. Einfach mal im Datenblatt unter Reset und Interrupt-Vektoren nachsehen, da steht alles drin. Weitere Infos gibt es im AVR-Tutorial. > ist das das Schlüsselwort main? Weil ich auch schon Programme gesehen > habe wo das "Haupt:" heißt... Das gilt wohl für Hochsprachen-Quelltexcte, damit der Compiler weiß, wo und wie er übersetzen soll. Das hat aber nichts mit ASM zu tun. ...
Ich weiß nicht ob es bei allen MC bzw. allen Compilern gleich ist. Normalerweise gibt es im MC eine Tabelle, in der die Adresse hinterlegt ist an der das Programm anfängt. Dort kann ein Name einer Funktion eingetragen werden. Der Compiler trägt die Adresse automatisch ein. Meist wird der Name "Main" gewählt.
Karsten wrote: > Aber woher weiß der Controller wo der Einsprungpunkt im Programm ist, > ist das das Schlüsselwort main? Weil ich auch schon Programme gesehen > habe wo das "Haupt:" heißt... Der Controller weiß es durch das Poweron-Reset, damit springt er zum Resetvektor und macht dort los. D.h. in Deinem Assemblerprogramm muß am Resetvektor ein gültiger Befehl stehen, üblicher Weise ein JUMP-Befehl zu Deinem Init-Krams. Danach läuft man in den Main-Krams (Endlosschleife) und danach plaziert man die Unterfunktionen. Beim AVR ist der Resetvektor 0x0000. Startest Du den Assemblerlauf, ist schon das Codesegment ausgewählt und auf Adresse 0x0000 gesetzt. D.h. der erste Befehl in Deinem Quelltext wird nach einem Reset ausgeführt. Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.