Hallo Leute!! Kann mir jemand sagen wie ich direkt in eine Speicherzelle im Programmspeicher springen kann? Entweder C-Code oder Assembler-Code wäre nett. Nutze einen Atmel T89C51AC2 mit 8051 Core und habe 32k Programmspeicher (7fff) Danke, TOM
Ähm - meinst Du jmp, ajmp bzw. call, acall ? Willst Du dorthin springen, um dort die Programmausführung weiterlaufen zu lassen, Daten aus einer Tabelle lesen, Sprungtabelle - Mist, meine Glaskugel geht momentan nicht.
nun gut, war vielleicht doch etwas allgemein formuliert!! Ich möchte aus einer Applikation heraus direkt in eine neue Applikation springen in dem ich an die Startadresse der 2. Applikation springe. die 2. Applikation hab ich compiliert, und die Hex-Datei mit einem Parallel-Programmer direkt an eine von mir festgelegte Adresse gesetzt. Habe es bereist mit den Assemblerbefehlen JMP LJMP, LCALL usw. probiert!! Vieleicht beginnt die Abarbeitung dieser Datei ja nicht an der 1. Speicheradresse??
Das kann nie funktionieren !!! Die 2. Funktion wird zwar korrekt ausgeführt, aber wenn sie zuende ist, weiß sie ja nicht mehr, wohin sie zurückkehren soll. Du hast sie ja mit einem JUMP angesprungen und nicht mit einem CALL. Sie holt sich also die nächsten Bytes vom Stack und springt dorthin. Das ist aber keine Return-Adresse sondern gesicherte Variablen der 1. Funktion. Sie springt also irgendwo hin. Ein Jump (goto) ist also nur innerhalb einer Funktion zulässig. Bzw. es gibt unter C die Möglichkeit über mehrere Instanzen zurück zu springen, aber nie nach vorne: int setjmp(jmp_buf jmpb); void longjmp(jmp_buf jmpb, int retval); Peter
jmp is fein, wenn, wie Peter sagt, Applikation 2 nicht zurück will oder mittels jmp Applikation1 zurückspringt. Das Probelm, das ich vielmehr sehe ist: Hast du Applikation 2 für deine Startadresse compiliert? Wenn nicht, springt der arme uC wahrscheinlich kunterbunt duch seine Bytewiesen, sprich absolute Adressen in Applikation 2, die für Startadresse 0 compiliert wurde, verweisen jetzt (durch deine Verschiebeaktion) auf irgendein Ziel, mit Sicherheit aber nicht auf das, was gewollt war.
Danke Uwe, das hört sich zeimlich plausibel an!! Werds mal anders versuchen.
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.