Re: Interrupt in ASM Kategorie: Programmierung Assembler (von PeterS - 16.01.2009 11:56) | |
Als Antwort auf Re: Interrupt in ASM von Jo - 15.01.2009 17:00
| |
> > > > > Hallo Peter; > > > > > > > > > > wird dies in naher Zukunft funktionieren ?! > > > > > > > > Ich habe deswegen schon schlaflose Nächte. :-) Nicht exakt so, aber so ähnlich wird es gehen. Kann aber > > > > sein, das ich es noch kurz nach dem Release nachschiebe. Also von jetzt an ca. 5-6 Wochen. > > > > Die Interruptroutinen werden dann den Assembler Code aufrufen, also ein "ret" und kein "reti" am Ende. > > > > > > > > Gruss Peter > > > > > > Hallo Peter, > > > verstehe ich das richtig: Der Interrupt unterbricht nicht die Ausführung des Interpreters sondern > > > der Interpreter Pollt weiterhin den Interrupt und ruft dann eine Assemblerroutine auf? Falls es so wäre > > > würden weiterhin Echtzeitanforderungen nicht realisierbar sein > > > > Nein das verstehst Du nicht richtig. Die Interruptroutine springt dann direkt in die Assemblerroutine und > > bypassed den Interpreter. Nur wie ich die Adresse der Assemblerroutine sauber in einen function pointer > > in der Interruptroutine gebracht bekomme, lässt die Anzahl meiner grauen Haare weiter steigen. > > > > Gruss Peter > > Hallo Peter, > ich vermute mal, das du für den Assembler Teil Speicherbereiche festlegts für Code und Daten. Dieser > kollidert nicht mit deinem Interpreter / Bytecode Bereich. Somit steht doch diese Einsprungadresse fest > und könnte mit Irq_SetVect(...) in das Interruptregister bzw. die Sprungtabelle eingetragen werden. > So habe ich es bei einem 18186 Projekt gemacht ich kann nur leider nicht sagen, ob es beim ATMEL > auch so geht. > Viele Grü�e > Jo Der Bytecode Compiler übersetzt zuerst das Hauptprogramm. Anhand der der Länge des Bytecodes wird die Org Adresse des Assembler Codes ermittelt. Der Bytecode Compiler erstellt eine Textdatei mit dem Namen und Adressen der Assembleraufrufe im Bytecode. Der Assembler erstellt neben dem Object auch eine mapping Datei mit den Adressen der generierten Assemblerroutinen. Die mapping Datei und die Textdatei mit Namen und Adressen werden eingelesen und die IDE patcht in einer Art "Linker" die Assembler Adressen in den Bytecode. Alles sehr dynamisch. Es gibt nur leider noch keinen Mechanismus um die Adressen der Assemblerroutinen übergeben zu können. Dafür mu� ich noch den "Linker" in der IDE kräftig aufbohren. Gruss Peter > > > > > > > > > > Viele Grü�e > > > > > > Jo > > > > > > > > > > > > > > > > > > > > > > > > > cc: > > > > > > > > > > void start $asm("start")(void); > > > > > > > > > > void main(void) > > > > > { > > > > > Irq_SetVect(INT_1,start); > > > > > } > > > > > > > > > > > > > > > asm: > > > > > > > > > > Start: ;Irgendwas > > > > > > > > > > reti > > > > > > > > > > > > > > > Gru� Michael > > > > > | |
Antwort schreiben Antworten: Re: Interrupt in ASM (von Michael - 20.03.2009 8:04) Re: Interrupt in ASM (von Heiko - 16.11.2009 11:32) Re: Interrupt in ASM (von Andy - 11.12.2009 13:22) Re: Interrupt in ASM (von PeterS - 17.12.2009 11:46) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum