Forum: Mikrocontroller und Digitale Elektronik Sprung an eine Adresse im Programmspeicher


von Tom (Gast)


Lesenswert?

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

von thkais (Gast)


Lesenswert?

Ä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.

von Tom (Gast)


Lesenswert?

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??

von Peter D. (peda)


Lesenswert?

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

von Uwe Arends (Gast)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.